Я пытаюсь обернуть голову вокруг функциональных зависимостей, но я ничуть не ухожу. В статье "Monad Transformers Step by Step" автор дает эти два определения типов:
class (Monad m) => MonadError e m | m -> e where
throwError :: e -> m a
catchError :: m a -> (e -> m a) -> m a
class (Monad m) => MonadReader r m | m -> r where
ask :: m r
local :: (r -> r) -> m a -> m a
Из моего понимания некоторых материалов, которые я нашел в Интернете, это означает, что переменная типа e
определяется m
. Я просто не понимаю, что это значит. Как это определяется? Может ли кто-нибудь пролить некоторый свет с минимальной теорией вначале, а затем связать более тяжелые вещи теории?
Спасибо