Anonymous
про охреневание это да
Aλexander
Ну кому как.
Зигохистоморфный
:D http://www.haskellchurchofchrist.org/
Alexander
Prelude Test.QuickCheck> quickCheck (\xs -> xs == reverse xs)
+++ OK, passed 100 tests.
QuickCheck power!
Anatolii
круто
Влод
Alexander
ничего
Alexander
просто кому-то может быть неожиданно почему quickcheck говорит что xs == reverse xs
Danila Matveev
мне как нубу необычно
ткните носом, пожалуйста
кана
кана
Для меня неожиданно
Alexander
defaulting rules
Alexander
поскольку информации для вывода типа xs недостаточно, то в ghci выводится тип по правилам:
1. если есть Num a => то Int
2. если нету то ()
Alexander
в общем тип у xs :: [()]
Alexander
для него очевидно xs == reverse xs
кана
Хм, ну да, логично
Евгений
кана
В данном случае Eq a => [a]
Евгений
Ага, сорь
кана
Полагаю, для теста нужно какое-то конкретное значение, наверное только () захардкорен
Alexander
Prelude> toEnum $ fromEnum '2' + fromEnum '2'
*** Exception: Prelude.Enum.().toEnum: bad argument
Alexander
Prelude> 1+ (toEnum $ fromEnum '2' + fromEnum '2')
101
Alexander
Prelude> 1.0+ (toEnum $ fromEnum '2' + fromEnum '2')
101.0
Alexander
я ж написал правила выше?
Зигохистоморфный
https://github.com/iostreamer-X/FuncShell
Cheese
это специфика ghci
Alexander
и это написал, не?
Зигохистоморфный
monad-classes or freer?
Anatolii
Ether посмотри еще
Зигохистоморфный
Aleksei (astynax)
По Эфиру можно даже автора поспрашивать :)
Aleksei (astynax)
Ether, это тем, кто хочет стэкать монадки в сложные стэки
Anatolii
Anatolii
Ну как и monad classes
Зигохистоморфный
Aleksei (astynax)
mtl же!
Anatolii
https://int-index.github.io/ether/
Зигохистоморфный
transformers -> mtl -> monad-classes or freer
Aleksei (astynax)
Ether стоит смотреть, если уже освоил mtl
Anatolii
Наверное в большинстве случаев mtl хватает
Aleksei (astynax)
mtl хватает, пока не захочешь несколько ридеров и т.п.
Anatolii
Ну я поэтому и написал в большинстве случаев
Aleksei (astynax)
Эфир как раз решает задачу стэкания нескольких трансформеров одного вида
Aleksei (astynax)
Вощм, надо Влада позвать - кто, как ни автор, сможет продать либу? :)
Anatolii
Как тут уже писали с ReaderT env IO очень много можно делать
Aleksei (astynax)
RWST IO хватит всем!
Anatolii
Хехе
Alexander
это та из-за которой код serokel не собирался на меньше чем 32гб оперативки?
Alexander
ReaderT e IO не слабее RWST IO
Aleksei (astynax)
Ну ок, IO хватит всем :)
Alexander
IO эффекты не отражаеи
Konstantin
хотите немного извращений? а то вы уже, наверное, забыли как выглядит настоящий мир
Konstantin
> m.utc("08/04/1984-23:00", "DD/MM/YYYY-HH:mm", true).month()
3
Cheese
PHP?
Konstantin
js 🙂
Andrew
Я так знал =D
Зигохистоморфный
Aleksei (astynax)
Ether
Konstantin
https://github.com/moment/moment/issues/3547
Konstantin
и это не баг!
Зигохистоморфный
у меня тут нода решила 1.5 гига съесть, что-то в ноде 9 не то
Donat
вот так заходишь на канал Haskell, а люди тут на js пишут :)
Andrew
Балуются просто
Vladislav
А последнее время я вообще склонен считать, что наибольший power2weight ratio у обычных transformers (даже не mtl), с rigid stacks. Это для всяких эффектов типа Reader, State, Except. А для эффектов бизнес-логики (то, что надо мокать), лучше mtl-style классы. В итоге имеем стек вроде (BusinessLogic1 m, BusinessLogic2 m) => StateT s (ExceptT e m) a, где m в конце будет ньютайпом над ReaderT AppState IO (как Снойман проповедует). Один ньютайп для тестов, другой для реального исполнения кода
Ilya
а расскажите, что такое эта ваша бизнес-логика
Vladislav
Наверное это неудачно я выразил, назвав бизнес-логикой. Идея в разделении чистого control-flow (ReaderT чтоб передать еще параметр, ExceptT чтобы иногда выйти из функции, StateT чтобы пробрасывать промежуточное состояние), и задач выполняемых приложением взамиодействуя с внешним миром (в БД сходить, запросы сетевые послать)
Vladislav
Первые мокать и не хочется, потому что это как раз то, как приложение работает. А второе хочется, поэтому его в mtl-style класс надо спрятать.
Ilya
да не, я правда не знаю, что значит этот термин:) хотя видел его сотни раз. вот интересно, кто что под этим понимает
Ilya
статья в википедии ясности не принесла
Ilya
слишком общо
Vladislav
Ну представь, что ты пишешь код на DSL, идеально заточенным под твою доменную область. Всякая сериализация/десериализация, консёрны с persistence, и т.д. — все это уже за тебя делают. Вот на таком DSL ты только бизнес-логику приложения описываешь. То есть то, что оно концептуально должно делать.
Vladislav
А на практике в итоге ты пишешь еще в 4 раза больше кода просто для инженерных задач, которые нужны для того, чтобы эту бизнес-логику на существующем языке и с существующими технологиями выразить
Ilya
идея понятна, спасибо
Alexander
всегда говорил что надо использовать просто tf
Alexander
transformers и.е.
Ilya
блин, это у меня получается в программах сплошные инженерные задачи решаются...
Зигохистоморфный
Vladislav