gpt4 book ai didi

haskell - “All about monads”中的MonadError部分

转载 作者:行者123 更新时间:2023-12-03 08:51:42 24 4
gpt4 key购买 nike

现在,我对“所有关于monads”所描述的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

实例之一就是e。
instance MonadError (Either e) where
throwError = Left
(Left e) `catchError` handler = handler e
a `catchError` _ = a

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

和!我已经在GHCi中运行了此代码(带有-XFunctionalDependencies,-XMultiParamTypeClasses)没有编译!这段代码是什么?

最佳答案

这只是一个错字,实例应该是

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

如您所料,带有两个类型参数。
Either e是monad,而 e是相应的错误类型。

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

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