Monaderror e m | -6ren">
gpt4 book ai didi

haskell - "All about monads"中的 MonadError 部分

转载 作者:行者123 更新时间:2023-12-01 13:57:10 24 4
gpt4 key购买 nike

我现在对“关于 monad 的一切”所描述的 Error monad 感到非常困惑。

它声称 Error monad 的定义为

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

实例之一是 Either e。

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

这是我不明白的地方。MonadError 类有两个类型参数,而 (Either e) 有一个,这是怎么回事实例化工作?这是因为功能依赖吗?我还是不明白。

还有!我在 GHCi 中运行这段代码(使用 -XFunctionalDependencies,-XMultiParamTypeClasses)没有编译!无论如何,这段代码是什么?

最佳答案

只是打错了,实例应该是

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

如您所料,有两个类型参数。

或者e是monad,e是对应的错误类型。

关于haskell - "All about monads"中的 MonadError 部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12955415/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com