Size: a a a

2021 October 11

AA

A64m AL256m qn<co... in Haskell Start
кметт
источник

YS

Yan Shkurinskiy in Haskell Start
Оу
источник

S

Saheidty in Haskell Start
спасибо
источник

YS

Yan Shkurinskiy in Haskell Start
А давно кана ушёл?
источник

YS

Yan Shkurinskiy in Haskell Start
Я думал он тут одменит
источник

AA

A64m AL256m qn<co... in Haskell Start
не знаю, я попробовал @ его но не сработало
источник

DG

Denis Gabidullin in Haskell Start
А он в каком чате сидит?)
источник

[

[BRM]White Rabbit in Haskell Start
источник

AA

A64m AL256m qn<co... in Haskell Start
в твиттере
источник
2021 October 12

И

Иван in Haskell Start
Привет, кто то читал эту статью - https://www.fpcomplete.com/haskell/tutorial/fundeps/ ?
Я чего то немного выпадаю на моменте:
greeting :: PersonReader String
greeting = do
 person <- ask
 pure $ show person

... we call ask in a context where type inference tells us that the value must be
ask :: PersonReader a. However, nothing tells us what that a must be. ...
При этом до этого мы делаем инстанс:
instance MonadReader Person PersonReader where
 ask = PersonReader $ \env -> env
Почему этого недостаточно для вывода типа и понимания того что a должен быть равен Person
источник

И

Иван in Haskell Start
То есть если у нас в классе типов MonadReader указано что у функции ask должен быть тип ask :: m env
и после этого мы пишем инстанс instance MonadReader Person PersonReader where у нас разве не должен получится конкретный тип ask вида PersonReader Person?
источник

И

Иван in Haskell Start
источник

И

Иван in Haskell Start
В общем вот тут - https://jsdw.me/posts/haskell-language-extensions/#multiparamtypeclasses нашел такое объяснение
Even if there is only one instance, the assumption is that more could be created, and so probably to avoid that changing existing behaviour, the compiler is pretty cautious.
Вроде это и есть ответ на мой вопрос, но довольно странно, что в ghc доке об этом ни слова, а в вики описано как то очень поверхностно - Naive use of MPTCs may result in ambiguity
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Одного параметра может быть недостаточно, чтобы выбрать инстанс, поэтому и ambiguity
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Решается через functional dependencies, например
источник

AP

Aleksei (astynax) Pi... in Haskell Start
instance MonadReader Person PersonReader where
 ask = PersonReader $ \env -> env

тут всего лишь сказано, что для этой конкретной пары — когда оба типа известны — инстанс будет такой
источник

И

Иван in Haskell Start
Да, спасибо, я уже разобрался вроде
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Без "| m -> env" компилятор не может выбрать env, исходя только лишь из m
источник

AP

Aleksei (astynax) Pi... in Haskell Start
Есть и другой способ — ассоциированный тип. Когда-то где-то даже были трансформеры в таком стиле, но победили те, что на FunDep
источник

И

Иван in Haskell Start
Вроде как ограничивается кол-во инстансов. Не может быть другого инстанса для монады m но с другим конкретным типом env
источник