Aleksei (astynax)
Т.о. hpack меня защищает от меня-дурака? Ну я рад :)
Aleksei (astynax)
Спасибо! Буду теперь спокоен :)
Aleksei (astynax)
Кстати, открытие дня для меня: в hpack можно сделать один
executable:
main: Main.hs
и он автоматически получит имя, как у пакета! Удобненько!
Теперь минимальный работающий package.yaml выглядит так
dependencies:
- base
executable:
main: Main.hs
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
Artyom
Artyom
выглядит как раз так, что они молодцы
A64m
вот когда будет бекпак работать в стеке - тогда будут молодцы. А пока они враги прогресса
Alexander
количество людей в группах в телеграмме можно использовать в CRDT они образуют semi-lattice, все время растут и не понижаются (на самом деле нет)
Leonid 🦇
А есть живой проект для юникернелов на хаскеле?
Leonid 🦇
Типа мираж ос
Kirill
The HaLVM is a proud member of the unikernel.org community
Алексей
Leonid 🦇
Kirill
ну вроде какое-то время назад реанимировали под эгидой 2-й версии
Kirill
коммит вон в мастере меньше месяца назад последний
Leonid 🦇
Kirill
больше ничего не навру
Kirill
в майлстоунах уже и 3-я версия есть
Алексей
Так если пофиг - бросай исключения
A64m
на 8.2 пока не перешли
A64m
хотя вот вижу ветка wip-halvm3-base-backpack что-то делают, значит
Алексей
Идея для стартапа: чат-бот, которому программисты объясняют свои проблемы
Leonid 🦇
Про юникернелы я спрашиваю из-за https://sdcast.ksdaemon.ru/2018/02/sdcast-74/ пока не дослушал
Leonid 🦇
Cheese
лет 40 назад такой был
Cheese
на все реплики отвечал "как вы думаете, почему так происходит?", "расскажите об этом подробнее"
Алексей
Туповат, неправдоподобен, хуже жёлтой резиновой уточки
Leonid 🦇
Уточка с домиком?
Cheese
ELIZA - Wikipedia
https://en.m.wikipedia.org/wiki/ELIZA
Cheese
о, уже 50 лет
Алексей
Leonid 🦇
Бездомная
Напишите премьеру, пусть озаботится
Alexander
Cheese
"у кого-то на Stack Overflow была подобная проблема, поищи"
A64m
какой-то неправильный чатбот
A64m
он должен отвечать, что это все не нужно
A64m
иначе слишком будет очевидно нечеловекоподобие
Leonid 🦇
"в окамле часто исключения используются как long jump" ужас
A64m
там раннее завершение функций типа списочных на эксепшонах
Влод
так это норм
в хаскеле вон вообще исключения для общения между тредами используют (я конечно в этом не уверен)
Cheese