Какие языковые расширения требуется для библиотеки MTL?

Я пытаюсь понять монадные преобразователи, внедряя свою собственную крошечную библиотеку на основе конструкций существующих.

То, на чем я застрял - это языковые расширения. В MonadError единственным упомянутым расширением является UndecidableInstances, Тем не менее, я не могу получить подобный код для компиляции без использования FunctionalDependencies а также FlexibleInstances,

Пример, который я считаю, требует FunDeps:

class (Monad m) => MonadError e m | m -> e where

И гибкий пример:

instance MonadError e m => MonadError e (MaybeT m) where

Как работает MonadError код избежать двух дополнительных расширений?

1 ответ

Решение

Вам не нужно прописывать все расширения в самом исходном файле. Общие расширения, которые используются всеми / большинством модулей, могут быть перечислены в файле cabal проекта. В случае MTL:

extensions:
    MultiParamTypeClasses
    FunctionalDependencies
    FlexibleInstances
Другие вопросы по тегам