Aleksei (astynax)
instance MonadError () Maybe where такое должно сойти тоже
instance MonadError () Maybe where throwError () = Nothing catchError Nothing f = f () catchError x _ = x > catchError (do { throwError (); Just 1 }) (const $ Just 42) Just 42
кана
можно это как ассоциированный тип себе представлять type Fundep String = Char и т.д.
Хм, ну так легко, да. Там Char, потому что [Char], а какой type FD Bool = Char бы уже не вышел, верно?
A64m
почему?
A64m
все бы нормально было
Aleksei (astynax)
Не вышло бы FD String = Int
Aleksei (astynax)
а FD () = Char - ок
Aleksei (astynax)
Направление стрелки в фундепе не просто так есть
A64m
тут не нужны контейнерные ассоциации
A64m
может быть пример, если у нас первое слагаемое дабл то и результат операции дабл например ит.д.
кана
Хм, ну таки да, Bool -> Char вполне работает
кана
Это все таки намного проще рассматривать как ассоциированный тип
кана
Чем какую-то магию по поиску типа внутри типа
кана
Наконец-то я понял фандепы
Aleksei (astynax)
С просветлением!
Aleksei (astynax)
(/me так говорит, будто сам всё понимает)
Aleksei (astynax)
Интуиция для фандепов неплохо развивается, если попробовать реализовать mtl с нуля.
кана
все таки имхо синтаксис для них не самый удачный, потому что синтаксически выглядит как будто для класса "* -> * -> Constraint" мы получаем Type*Type всех комбинаций, а на определении "a b" и "a c" уже ругается, что понятно после понимаю фандепов, но синтаксически неочевидно Да и не нужно лишний раз указывать второй тип, он же все равно однозначно выводится из первого
кана
через семейства явно лучше
Aleksei (astynax)
Это вкусовщина
Alexander
учитывая что семейства строго слабее
Alexander
даже type families dependencies
Alexander
у которых такой же синтаксис
Alexander
но они ещё и не доделаны
A64m
можно еще http://www.cse.chalmers.se/~hallgren/Papers/Hallgren01.pdf почитать, там более общая интуиция вырабатывается, оттуда и понятно почему у них такой синтаксис
Aleksei (astynax)
даже type families dependencies
это которые ~>?
Vitaly
но они ещё и не доделаны
Это можно вообще про всё писать в GHC
Alexander
которые type family Foo a b | b -> a
Aleksei (astynax)
А! Ок
A64m
да, фундепы тоже недоделаны
A64m
просто их уже давно и не доделывают
Alexander
ну там совсем не доделаны
Alexander
только 1 к 1 переменными связь
Vitaly
Но выкинуть боятся
Alexander
а заменить то нечем
A64m
но тут-то под недоделанностью подразумеывается, что первоначальный план/пропозал не имплементирован полностью
A64m
как первоначальные семейства до 7,2
Leonid 🦇
ухты, я по статсам на 3м месте! Правда @qnikst и @A64m_qb0 никто не догонит.
Leonid 🦇
@qnikst ты как-то говорил что зачал новый "сервис" с апишечкой в стиле http-rpc. оно у тебя на серванте?
Alexander
уже да
Leonid 🦇
ты стал мутить свой комбинатор для типа ошибок, или забил?
Alexander
забил пока
Leonid 🦇
я вообще не уверен что хочу с сервантом заморочится
Leonid 🦇
слишком он тайп левел
Leonid 🦇
ошибки на 25 экранов. компиляшка медленная.
Leonid 🦇
/me мучается
Alexander
я когда начал ErrorT переизобретать и автосбор-разбор сообщений
Alexander
и захотел сваггер, то решил взять сервант
Alexander
учитывая что это все надо было "завтра"
Leonid 🦇
вот сваггер это пока единственное что хотелось бы
Leonid 🦇
и то не факт.
Kirill
ошибки на 25 экранов. компиляшка медленная.
Есть servant-named и ещё какой-то вариант на рекордах - всё не дотягиваюсь поковырять до конца
Зигохистоморфный
внезапно https://github.com/haskell-servant/servant-js
Leonid 🦇
да этого добра много
Viacheslav
да чтож такое
Viacheslav
как не зайдешь сюда обсуждают js
Зигохистоморфный
я такое еще для котлин нашел
Зигохистоморфный
https://hackage.haskell.org/package/servant-kotlin
Anonymous
так суть серванта в том что такие штуки просто делать
Kirill
Даёшь servant-whitespace!
Зигохистоморфный
кстати у пурсы тоже есть тайплевел https://github.com/owickstrom/hyper
A64m
посмотрел доклад про этот ваш котлин, потрясающее убожество делают, конечно. Сделали опять C# (ну не совсем, противонуллострадания там все еще никак недоделают) через 10+ лет, ну, хорошо что не Го.
Leonid 🦇
@A64m_qb0 измученные явой андройдописцы радуются
Andrei
на F(by) 2016 был доклад про ФП на Kotlin. Это всё, что надо знать о.
Aliester
писали новый Смолтолк а получился как всегда C#
A64m
какой там смолток еще?
A64m
@A64m_qb0 измученные явой андройдописцы радуются
ну так C# же, т.е. жава с немного уменьшенными страданиями
A64m
ты бываешь вообще чем-то довольный?)
конечно. вот, например: > хорошо что не Го
Зигохистоморфный
зачем Крис Мартин придумал PartialSemigroup? https://hackage.haskell.org/package/partial-semigroup-0.0.0.1
Aleksei (astynax)
> A partial semigroup is like a semigroup, but the operator is partial.
Aleksei (astynax)
чтобы жизнь малиной не казалась :)
Anonymous
получается что что угодно образует partial semigroup 🤔
Oleg
К примеру, суммы/ произведения интов с учётом переполнения
Oleg
Для чего угодно и просто semigroup можно определить
Oleg
Через First или Last