Vasiliy
> {} + {} '[object Object][object Object]' > {} + {}; NaN
Зигохистоморфный
кана
Слушай, ты что, издеваешься?
Влод
вообще тут все имплаят что у тебя локально развёрнут самый свежий хугл
кана
Не может человек, прочитав 3 раза, не понять, что он прочитал
Leonid 🦇
подержи пиво
Aleksei (astynax)
я думал он просто про свой опыт рассказывает
рассказываю свой опыт общения с питонистами - слошь все считают, что кортеж, это такая коллекция. Причем думают, что везде так
Cheese
и Foldable пары, и {} + {} объясняются одинаково: если залезть на шкаф и встать на голову, то становится всё очевидно
Влод
Aleksei (astynax)
эт да
Влод
http://hackage.haskell.org/package/base-4.6.0.1/docs/Prelude.html#v:length
Зигохистоморфный
а постарее нельзя?
Aleksei (astynax)
Да даже если перейти по ссылке в хугле, то будет length :: t a -> Int внутри class Foldable
Aleksei (astynax)
Вот показывает хугл неактуальный тип: https://www.haskell.org/hoogle/?hoogle=length
кана
это какой-то пиздец. Я же ровно об этом же написал 10 минут назад
Aleksei (astynax)
http://hayoo.fh-wedel.de/?query=length
Aleksei (astynax)
Хаю лучше работает, кароч
Влод
ты серъезно? length делает ограничение на Foldable
просто утверждение получается не совсем истинное
Aleksei (astynax)
Vladislav
Педагогическая ошибка Хаскеля в том, что у кортежей симметричный синтаксис, но несимметричная семантика
Vladislav
Если бы пара выглядела, например, как b `AnnotatedWith` a а не (a, b), то никто бы не возмущался
Aleksei (astynax)
Вот за Either лично мне обидно: все его норовят использовать для обработки ошибок, хотя есть Except
Влод
А ещё мне кажется он ущемляет левшей
Влод
Ну или точнее его инстансы
Misha
ну так потому что Either намного проще
Alexander
@astynax Except жирный больно
Aleksei (astynax)
ээээ Except, это newtype над Either же
Aleksei (astynax)
только с явным разделением на throwError и pure
Aleksei (astynax)
ну так потому что Either намного проще
Вот привыкают к плохому, а потом объясняй людям, что у тебя в конкретном месте не "с ошибкой", а просто сумма
Misha
я совершенно честно не знал
Misha
ну и неудивительно, в общем-то, учитывая статьи типа {8,9,10} ways of handling errors in Haskell и вот это все
Misha
с точки зрения освоения это вообще наверное самая слабая и мутная часть языка и библиотек
Aleksei (astynax)
сейчас рекомендуется Except, или уж эксепшны. Как то так, вроде
Aleksei (astynax)
Псто много книг, написанных до появления Except
доня.
как эксепшны могут рекомендоваться если это небезопасно, грязно и фу-фу-фу?
Alexander
@astynax type Except e = ExceptT e Identity или другой Except?
Vasiliy
Alexander
вотя и говорю, что он жирнее, чем Either
Aleksei (astynax)
ещё и асинхронные эксепшны есть
Aleksei (astynax)
вотя и говорю, что он жирнее, чем Either
несильно, зато трансформер!
Aleksei (astynax)
State сотоварищи - тоже алиасы над тпансформерами с идентити
Aleksei (astynax)
Это уже на спичках экономия :)
Зигохистоморфный
и Reader, Writer, RWS
Aleksei (astynax)
Identity - newtype, лишних оберток нет все равно
Зигохистоморфный
кынули тут http://starcolon.com/blog/moment-of-wtf-on-learning-haskell/index.html
Vladislav
Правильные тип сумма и тип-произведение это Rec и Union
Vladislav
они сразу N-арные
Vladislav
И у них нет всяких инстансов Foldable (даже по кайндам не сойдется)
Vladislav
Но их мешает использовать (1) синтаксический оверхед (2) небольшой performance-penalty
Vladislav
А еще хочется унификации higher-order произведений и сумм. Потому что раздражает иметь data Pair a b = Pair a b data Product f g a = Product (f a) (g a) data Biproduct f g a b = Biproduct (f a b) (g a b) ...
Vladislav
Здесь, опять же, Rec и Union подходят за счет параметризации интерпретирующим функтором.
Vasiliy
Rec, я так понимаю, из vinyl
Vladislav
https://hackage.haskell.org/package/vinyl-0.6.0/docs/Data-Vinyl-Core.html
Vasiliy
Union из union
Vladislav
А почитать нигде не могу порекомендовать хорошего, но вот в этой книжке будет https://intermediatehaskell.com/
Vladislav
Union из union
Ага, а еще в новом vinyl ввели CoRec, который вроде эквивалентен (но устроен по-другому внутри)
Vasiliy
ого, здорово
Vasiliy
CoRec - он из пакета Frames того же автора
Vladislav
В общем я только хочу сказать, что штуковины с кайндом (k -> *) -> [k] -> * — это удачная концепцая, часто полезная, но с определенным оверхедом, который не всегда оправдан. Если бы они имели больше поддержки в языке (удобный синтаксис хотя бы), то было бы хорошо.
Vladislav
У них и с выводом типов история хорошая, компилятор всегда подсказывает в нужном направлении при использовании.
Vladislav
Т.е. хотя на первый взгляд это может показаться какой-то адок на типах, там нет линзоподобных ошибок
Alexander
(k -> *) -> [k] -> * вообще прекрасно
Зигохистоморфный
Alexander
удобно в хозяйстве, можно много чего выразить
Dmitrii
> {} + {} '[object Object][object Object]' > {} + {}; NaN
Напомнило (не WAT, но новичкам как обычно может быть в диковинку ghci> [] ++ [] [] ghci> [] ++ "" "" ghci> [] == "" True
Misha
так type String = [Char] же
Dmitrii
Да, с этим спорить я не буду
Vladislav
:set -XOverloadedLists -XOverloadedStrings
Vladislav
и после этого вышеперечисленное вообще не обязано работать
Anonymous
там же ад и ужас в жавах со спрингом
это не спринг чат ребят... я думаю для таких дискусий вам сюда t.me/springframeworkio
Alex
спринг некромант :)