Vasiliy
> {} + {}
'[object Object][object Object]'
> {} + {};
NaN
Зигохистоморфный
кана
Слушай, ты что, издеваешься?
Влод
вообще тут все имплаят что у тебя локально развёрнут самый свежий хугл
кана
Не может человек, прочитав 3 раза, не понять, что он прочитал
Leonid 🦇
подержи пиво
Cheese
и Foldable пары, и {} + {} объясняются одинаково: если залезть на шкаф и встать на голову, то становится всё очевидно
Влод
Cheese
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)
Хаю лучше работает, кароч
Влод
Aleksei (astynax)
Vladislav
Педагогическая ошибка Хаскеля в том, что у кортежей симметричный синтаксис, но несимметричная семантика
Влод
Vladislav
Если бы пара выглядела, например, как
b `AnnotatedWith` a
а не (a, b),
то никто бы не возмущался
Vladislav
Aleksei (astynax)
Вот за Either лично мне обидно: все его норовят использовать для обработки ошибок, хотя есть Except
Влод
А ещё мне кажется он ущемляет левшей
Влод
Ну или точнее его инстансы
Misha
Misha
ну так потому что Either намного проще
Alexander
@astynax Except жирный больно
Aleksei (astynax)
ээээ Except, это newtype над Either же
Aleksei (astynax)
только с явным разделением на throwError и pure
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
Aleksei (astynax)
Alexander
вотя и говорю, что он жирнее, чем Either
Aleksei (astynax)
Aleksei (astynax)
ещё и асинхронные эксепшны есть
Aleksei (astynax)
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
удобно в хозяйстве, можно много чего выразить
Misha
так type String = [Char] же
Dmitrii
Да, с этим спорить я не буду
Vladislav
:set -XOverloadedLists -XOverloadedStrings
Vladislav
и после этого вышеперечисленное вообще не обязано работать
Alex
спринг некромант :)