Aleksei (astynax)
Т.о. hpack меня защищает от меня-дурака? Ну я рад :)
Aleksei (astynax)
Спасибо! Буду теперь спокоен :)
Aleksei (astynax)
Кстати, открытие дня для меня: в hpack можно сделать один executable: main: Main.hs и он автоматически получит имя, как у пакета! Удобненько! Теперь минимальный работающий package.yaml выглядит так dependencies: - base executable: main: Main.hs
Alexander
Это вообще легально?
кабал всегда его генерит, полезный модуль
Aleksei (astynax)
Я просто сам не дописывал его в .cabal, вот и удивился
Anonymous
подскажите пожалуйста, если кто в курсе, как использовать изоморфизм из Lens, если хочешь ограничиться microlens?
Anonymous
из документации это не особенно ясно
Leonid 🦇
Скопипастить себе из lens?
Leonid 🦇
Сами Iso не требуют ничего кроме профункторов вроде. Вот комбинаторы требуют
Leonid 🦇
from, например
Artyom
изоморфизм можно использовать как обычную линзу, тут все просто а вот инвертировать изоморфизм, используя только microlens, уже сложнее вообще, раз появилась зависимость от lens, зачем юзать microlens?
Leonid 🦇
Может хочется предоставить API с изоморфизмами без лишних зависимострей
Artyom
а, то есть сделать изоморфизм, а не использовать
Artyom
возможно, стоит пойти и сделать все-таки microlens-pro, а не то раз десятый уже вижу этот запрос 🤔 хотя, конечно, лучше бы кто-нибудь за меня сделал 😉 коммит-права с радостью дам
Leonid 🦇
Ну или пользовать кусочек. Для from достаточно скопипастить 10 строк
Anonymous
@lonokhov, @lightgreen, спасибо!
Leonid 🦇
Допустим я хочу подключаемые бекенды для хранения юзеров. Апи вида getUser :: UserId -> m User saveUser :: User -> EitherT UserConflicts m () на даёт транзакции. Можно конечно наделать мелких функций типа markSuccessefulLogin :: UserId -> m () lockOutUser :: UserId -> UTCTime -> m () И наверно оно будет норм, но может такое тоже норм? modifyUser :: UserId -> (User -> Either e User) -> m (Maybe (Either e User)) выглядит ужасно. А если еще приплести возможность UserConflict то совсем тошно. Ну или исключения тогда уж использовать для UserConflict.
Leonid 🦇
Советы?
Aleksei (astynax)
MonadThrow и выпилить Maybe (Either e User)
Leonid 🦇
не люблю я исключения, Снойманищина выходит :( modifyUser :: Exception e => MonadThrow m => UserId -> (User -> Either e User) -> m User modifyUser :: Exception e => MonadThrow m => UserId -> (User -> Either e User) -> m (Maybe User) Жалко нет вменяемого синтаксиса для анонимных сумм
Aleksei (astynax)
Так у тебя m то всё равно MonadIO небось
Aleksei (astynax)
Так что исключения хуже не сделают
Leonid 🦇
ну как не сделают, мне во всяких либак с исключениями несколько бесит что приходится ковырять сорцы и искать "А чо оно может кинуть?"
Leonid 🦇
доки врут, типы нет
Leonid 🦇
Хотя да, если чекать конфликты юзернеймов и прочего до модификации то наверно не страшно если оно эксепшеном прилетит в супер редком случае конкуретного изменения
Leonid 🦇
кек https://github.com/commercialhaskell/stack-templates/pull/112
Leonid 🦇
"Со стэком ваши старые туториалы не сломаются!"
Aleksei (astynax)
Ну так указывай в туториале явно имя шаблона.
Aleksei (astynax)
Это как номер снапшота не указать
Aleksei (astynax)
Хочется предсказуемости - нужно фиксировать всё
Leonid 🦇
я думаю многие даже не думали о шаблонах и их существовании
Leonid 🦇
Я к тому что всё это всегда подавалось под соусам "подумайте о детях". А тут на детей еще и шаблоны вываливать.
Aleksei (astynax)
В чем посыл то? В том, что "stack - зло, и Снойман - негодяй"? Со стеком стало проще начинать. hpack ещё больше упрощает конфигурирование, как и готовые шаблоны
Leonid 🦇
А потом новички мучаются почему они делают как им советуют - меняют .cabal и ничего не происходит. И опять же stack.yaml vs package.yaml.
Leonid 🦇
посыл в том что в своём глазу бревна нет
Leonid 🦇
я согласен что со стэком удобнее новичкам, но вот такие внезапные и ничем не оправданные изменения я осуждаю
A64m
со стеком действительно стало проще. Для начинающих, на виндовс и т.д. Но в 17 году со стеком стало обратно становиться сложнее. Наверное слишком много времени на борьбу с кабалистами стало уходить,
Aleksei (astynax)
если это отражено в CHANGELOG, который у stack есть, в отличие от многих пакетов, то норм. В доке это учтут тоже, наверняка
Leonid 🦇
впрочем cabal init мне удобнее чем разбираться с шаблонами. и simple шаблон тоже весьма opinionated
Artyom
выглядит как раз так, что они молодцы
Leonid 🦇
так его ж ревертнули
ну и ладно тогда. просто некоторые видать успели попасть в окно
A64m
вот когда будет бекпак работать в стеке - тогда будут молодцы. А пока они враги прогресса
Alexander
количество людей в группах в телеграмме можно использовать в CRDT они образуют semi-lattice, все время растут и не понижаются (на самом деле нет)
Leonid 🦇
А есть живой проект для юникернелов на хаскеле?
Leonid 🦇
Типа мираж ос
Kirill
The HaLVM is a proud member of the unikernel.org community
Алексей
Хотя да, если чекать конфликты юзернеймов и прочего до модификации то наверно не страшно если оно эксепшеном прилетит в супер редком случае конкуретного изменения
Но это повышает вероятность того, что именно этот суперредкий случай не будет обработан корректно. А какая семантика нужна от API?
Leonid 🦇
The HaLVM is a proud member of the unikernel.org community
А его пилят, или PhD уже получен?
Kirill
ну вроде какое-то время назад реанимировали под эгидой 2-й версии
Kirill
коммит вон в мастере меньше месяца назад последний
Leonid 🦇
Но это повышает вероятность того, что именно этот суперредкий случай не будет обработан корректно. А какая семантика нужна от API?
Ну если не обработается то не страшно, вернётся 500 и запись в лог будет. А семантика serialized транзакции, для простоты
Kirill
больше ничего не навру
Kirill
в майлстоунах уже и 3-я версия есть
Алексей
Так если пофиг - бросай исключения
A64m
на 8.2 пока не перешли
Leonid 🦇
Так если пофиг - бросай исключения
Вот да. Анализ Api через разговор (с собой) в чате помог
A64m
хотя вот вижу ветка wip-halvm3-base-backpack что-то делают, значит
Алексей
Идея для стартапа: чат-бот, которому программисты объясняют свои проблемы
Leonid 🦇
Про юникернелы я спрашиваю из-за https://sdcast.ksdaemon.ru/2018/02/sdcast-74/ пока не дослушал
Cheese
лет 40 назад такой был
Cheese
на все реплики отвечал "как вы думаете, почему так происходит?", "расскажите об этом подробнее"
Алексей
Туповат, неправдоподобен, хуже жёлтой резиновой уточки
Leonid 🦇
Уточка с домиком?
Cheese
ELIZA - Wikipedia https://en.m.wikipedia.org/wiki/ELIZA
Cheese
о, уже 50 лет
Алексей
Leonid 🦇
Бездомная
Напишите премьеру, пусть озаботится
Alexander
Идея для стартапа: чат-бот, которому программисты объясняют свои проблемы
reply _ = randomOf ["а.. да..", "точно!", "не уверен, что понимаю, объясни подробнее","наверное"]
Cheese
"у кого-то на Stack Overflow была подобная проблема, поищи"
A64m
какой-то неправильный чатбот
A64m
он должен отвечать, что это все не нужно
A64m
иначе слишком будет очевидно нечеловекоподобие
Leonid 🦇
"в окамле часто исключения используются как long jump" ужас
A64m
там раннее завершение функций типа списочных на эксепшонах
Влод
так это норм в хаскеле вон вообще исключения для общения между тредами используют (я конечно в этом не уверен)