Создание пользовательского преобразователя монад экземпляром MonadError

Я хочу, чтобы мой преобразователь монады был экземпляром MonadError, если преобразованная монада является экземпляром. В основном я хочу, чтобы мой преобразователь вел себя так же, как встроенные преобразователи, например, есть экземпляр MonadErrorдля StateT:

MonadError e m => MonadError e (StateT s m)

Я пытался сделать это:

instance MonadError e m => MonadError e (MyMonadT m)

Но GHC начал жаловаться на неразрешимые экземпляры, по-видимому, библиотека MTL просто разрешает неразрешимые экземпляры, но есть ли способ избежать этого? Или в этом случае все нормально и проблем не будет?

5
задан Marek Sapota 30 March 2012 в 22:58
поделиться