случился затык.
class Monad m => MonadState s m | m -> s where
Что значит часть | m -> s ?
Почему бы не обойтись без неё
class Monad m => MonadState s m where
?
https://wiki.haskell.org/Functional_dependencies
Спасибо за ссылку. Стало понятно, что это, но непонятно зачем это. Накидал такой код. Он работает в двух случаях: либо я явно указываю тип ( :: Foo ) либо вешаю ограничение | a b -> c на Mult (и в этом случае, я не могу объявить instance Mult Foo Foo String ) . Ниже было сказано, что с помощью последнего действия мы говорим компилятору, что-то в духе "Обещаю не делать других инстансов для Foo" Но мне непонятно 1. Почему компилятор не видит, что других инстансов Mult для Foo нет и не использует единственную доступную реализацию? 2. Почему у Functional dependencies такой синтаксис, а не что-то в духе class Foo a b c | singleonly ведь смысл в итоге в запрете других реализаций?
Обсуждают сегодня