Haskell MonadError

时间:2016-08-26 19:56:25

标签: haskell error-handling monads

我正在查看有关haskell monad的教程 我遇到过这种类型:

class (Monad m) => MonadError e m | m -> e where
    throwError :: e -> m a
    catchError :: m a -> (e -> m a) -> m a

我想知道为什么类型参数是e然后m,我会认为它会是因为当我查看这个类的实例时:

instance MonadError (Either e) where 
throwError = Left 
(Left e) `catchError` handler = handler e 
a        `catchError` _       = a

monad构造函数要么首先出现,所以我的问题是为什么在类声明中切换了类型参数?

0 个答案:

没有答案