Anatolii
я тоже нашел бимап:)
Дмитрий
Благодарю.
Anatolii
не успел:)
Alexander
блин мне опять сервант мозг ест
Alexander
иногда он сложный блин
Дмитрий
Когда знаешь, что такое существет, но вспомнить не можешь :(
Дмитрий
А вообще, такой момент, я тут пользую вебсокет. И при закрытии коннекта сообщаю об этом с помощью финали, так вот, мне почему-то казалось, что финали прикрывает исключения и не даёт загаживать консоль... а в вывод сообщения всё равно попадают. Что я делаю не так?
Alexander
finally не прикрывает исключения
Дмитрий
Так, а чем их можно прибить?
Anatolii
catch сделайть
Дмитрий
честно ловить try?
Alexander
finally action finallier = (action `catch` (\(SomeException e) -> finalizer >> throw e) >> finallier
Alexander
try/catch
Alexander
можно взять safe-exceptions/exceptions-safe
Alexander
оно часто работает
Alexander
так вот сервант
Alexander
я сделал Streaming ответы, если они выдают стрим в каком-нить IO то все круто
Alexander
но вот теперь у меня стрим в чем-нить более сложном, например ResourceT IO или даже ResourceT (Reader Db IO) и чего делать непонятно
Alexander
контекст должен жить дольше, чем сервант делает ответ
Alexander
Тоже приходится через сервантные приколы продираться. К счастью, есть колоеги, умеющие в магию на типах, можно у них код покрасть.
Alexander
т.е. его надо в HasServer отдавать
Alexander
магия на типах это просто
Alexander
не просто когда там внутри их бесконечные HasServer со 100500 недокументированых параметров и сервантовых врапперов в internals
Alexander
хорошо, конечно когда авторы серванта в чятике есть
Alexander
но все равно иногда тяжело
Дмитрий
Ну у меня проще, пока никакой магии я переплёвываюсь между потоками через chan если кто умер, то сообщаю через finally по тем же чан :)
Kirill
@qnikst в рабочем чатике?
Alexander
(я не могу угадывать, но возможно async пакет может помочь)
Alexander
Kirill да
Alexander
это кстати и минус
Alexander
магия на типах это просто
Это то, за что нужно бить по рукам. Если сервант еще ничего, то Opaleye уже слишком. А коллега к тому же наворотил свои рекорды сбоку. Очень высокая accidental complexity.
Kirill
А кто у вас из авторов?
Alexander
Junial Arni
Alexander
или как там фамилиё
Alexander
Julian
Kirill
А, даже так, кул
Alexander
Альп был, но он ушёл и свою фирму сделал давно ещё
Alexander
кстати это минус, спросишь что-нить и не отмажешься от того, чтобы идти и делать PR
Kirill
А как зовётся?
Kirill
Фирма альпа?
Kirill
Не в паблике?
Alexander
не знаю
Alexander
я с ним особо не общался
Alexander
Да, кстати. Можете накидать хорошие материалы по type families?
Kirill
@qnikst a на сайте у него WT
Alexander
хм.. ну может быть
Alexander
Александр я в основном по документации в trac разбирался и с кучей игр со всякими регионами и т.п.
Alexander
про опалай, кстати, наверное я согласен
Alexander
но может мне было лень разбираться
Denis
Дело в том что получаешь путем усложнения. Если получаешь много всгео и нахаляву, то почему бы и нет.
Denis
Я вот сторонник макбрайдовской философии
Denis
пусть типы пишут программы
Alexander
Denis
мне все равно что думает гипотетический новичок про мою кодобазу
Denis
Код пишется не для чтения вымышленными новичками, а разрабатывается в команде. Если команде нормально, то все в порядке. Если черезчур сложно править - не нормально.
Alexander
Сами по себе типы не виноваты, но код не должен быть рассчитан на то, что его сможет поддерживать только продвинутый разработчик.
Denis
давайте все на го писать тогда
Alexander
давайте все на го писать тогда
Доведение до абсурда не есть аргумент.
... А в случае кастомных, еще не стабилизировавшихся решений, поддерживать сможет только сам автор
Denis
го это не абсурд, это реалии индустрии
Andrei
Denis
Andrei
Если предметная область объективно сложна, то и её представление в типах тоже сложно, как бы оно просто не выглядело на бейсиках.
Alexander
Есть essential и accidental complexity. Против других дизайнерских решений типы проигрывают по второй шкале.
Дмитрий
А вообще, есть вроде минимальная сложность представления. И с этой гадостью ничего не сделаешь :(
Дмитрий
Но тут опять же нужно честно доказывать теорему, что проще чем Х явленияе Y записать не получится и хоть ты тресни :(
Andrei
именно. https://fsharpforfunandprofit.com/posts/designing-with-types-making-illegal-states-unrepresentable/#why-bother-to-make-these-complicated-types
Alexander
Но магия на типах привносит свою accidental complexity, и она больше, чем у других решений (free DSL, например)
Denis
Причем тут free?
Denis
Если нужны статические проверки, то нужны типы.
Denis
Хотите определенный класс ошибок исключить статически - типы.
Хотите чтобы компилятор больше кода за вас писал - типы.
Denis
(ну во втором случае еще TH и прочие разновидности дженериков иногда помогают, но зависит от случая)
Дмитрий
>Хотите чтобы компилятор больше кода за вас писал - типы.
Шаблоны и кодогенерация?
Denis
в шаблонах типы
Дмитрий
А вот как заставить типами писать код типами, честно не знаю.
Дмитрий
Разве что классами типов обобощать...
Denis
типы пишут термы
Дмитрий
Но это не совсем написание кода :)
Denis
когда это возможно