kosc
Кккк
Alexander
да вы издеваетесь!
Андрей
только в руби)
kosc
Я так пишу :(
kosc
Простите.
Leonid 🦇
@catamorphism тут красивее https://gist.github.com/sopvop/1b6bdbf35dc1d5105a061ef295836e15
@qnikst вот мой код с RPC и внизу выдранный из серванта. Почему мой ноет про Overlapping Instances для ServerT?
Denis
а в серванте работает
У меня такая же проблема была! И я как назло не помню в чем было дело.
Leonid 🦇
может нужно не включить, а выключить какие-то расширения...
Leonid 🦇
нет :(
Denis
а ошибку покажи?
Leonid 🦇
src/Servant/API/RPC.hs:74:8-55: error: … Conflicting family instance declarations: ServerT (RPC e r) m = m (Either (OpenUnion e) r) -- Defined at /home/lonokhov/work/stagex-store/stagex-api/src/Servant/API/RPC.hs:74:8 ServerT (RPC e (Headers h r)) m = m (Headers h (Either (OpenUnion e) r)) -- Defined at /home/lonokhov/work/stagex-store/stagex-api/src/Servant/API/RPC.hs:81:8
Denis
а ты уверен что именно эти две конфликтуют?
Denis
а хотя тут строки
Leonid 🦇
а больше некому
Denis
в ошибке
Andrey
Если некто перманентно пребывает в контексте непонимания монад, но при этом способен внспринимать информацию снаружи, причем независимо от степени ее разделения на отдельные части, то можно ли утверждать, что он уже в двух шагах от понимания?
kosc
Кажется, вы про меня сейчас.
kosc
Но я не уверен.
Aleksey
все так
Leonid 🦇
к вечеру всё должно быть в продакшене. кек. Пойду на фриноду искать помощи
Denis
я тут слепил репро-модуль
Denis
какое-то тайпфемильное свойство нарушаем
Denis
а вообще я пытаюсь понять почему в серванте работает
kosc
Да что ж, блин, не так со мной.
kosc
Что есть функтор, а что монада?
kosc
Что-то одно из этого - частный случай другого?
Alexander
Headers это что?
Dmitry
ЧИТАЙ TYPECLASSOPEDIA
Alexander
кстати был сайт с контрпримерами к тайпклассопедии
Denis
промоученный тип
Alexander
вообще учебники с контрагентами примерами прекрасны
Denis
про Headers
Dmitry
Давай
Denis
data Headers bla abl lab
Denis
такое
Ю ли я? 🤔
Что-то одно из этого - частный случай другого?
Монада - частный случай аппликатива, аппликатив - частный случай функтора
kosc
Ну так IO - это монада всё же?
Dmitry
А какая разница?
Leonid 🦇
мне на фриноде объяснили
Denis
и в чем дело?
Ю ли я? 🤔
Ну так IO - это монада всё же?
Да, ибо есть инстанс
Leonid 🦇
в случае серванта выходит: m a и m (Headers h a) и в пересекающемся инстансе a ~ Headers h a. у меня же не так
Dmitry
кстати был сайт с контрпримерами к тайпклассопедии
Это: http://blog.functorial.com/posts/2015-12-06-Counterexamples.html ?
Leonid 🦇
да
Leonid 🦇
решение - вынести Either e a в голову инстанса
Leonid 🦇
https://gist.github.com/sopvop/1b6bdbf35dc1d5105a061ef295836e15#file-overlap-hs-L64
Leonid 🦇
уродски
Denis
после этого компилится?
Leonid 🦇
да
Leonid 🦇
если в итоге сваггером никто пользоваться не будет, я возненавижу сервант совсем сильно и буду всем советовать не трогать его
Denis
скомпилилось у меня тоже, но я чего-то суть не понял
Leonid 🦇
суть в том что m (Either e a) ~ m (Headers h (Either e a)) vs m a ~ m (Headers h a). первное невозможно а второе возможно
Leonid 🦇
одно тайп фэмили согласовывается, а второе нет
Leonid 🦇
не унифицируются
Denis
постойте ка
Denis
ошибка говорит что о том что LHS у двух тайп фемили друг с другом унифицируемы
Leonid 🦇
может сделать класс class RpcResult e a r | r -> e, r -> a where rpcResult :: r -> Either (OpenUnion e) a для красоты?
Leonid 🦇
ошибка говорит что они конфликтуют
Denis
хотя должно быть пофиг, наверное, т.к. тип ассоциирован с инстансом, а инстанс выбирается до этого
Leonid 🦇
головы одинаковые, а RHS не оверлапятся
Leonid 🦇
головы оверлапятся а хвосты нет
Leonid 🦇
муть
Denis
зачем RHS оверлаппиться?
Alexander
я вот не понял
Alexander
я бы понял если Headers это семейство
Alexander
с телефона и без компилятора правда тяжело понимать
Denis
я тоже не понял
Alexander
оно ж там справа
Alexander
в левую сторону вообще можно не смотреть
Alexander
если там в overlapping проблема была
Denis
я про то что оно там слева в т.ч., поэтому это не могло быть проблемой
Alexander
а