gpt4 book ai didi

haskell - 将错误值提升到 ErrorT monad 转换器

转载 作者:行者123 更新时间:2023-12-04 18:48:29 25 4
gpt4 key购买 nike

我想我缺少对 monad 转换器的一些基本了解,因为我发现自己编写了以下代码:

import Control.Monad.Identity
import Control.Monad.Error

liftError :: Either String Int -> ErrorT String Identity Int
liftError x = do case x of
Right val -> return val
Left err -> throwError err

gateway :: Bool -> ErrorT String Identity Int
gateway = liftError . inner

inner :: Bool -> Either String Int
inner True = return 5
inner False = throwError "test"

虽然这有效,但我认为这可以更优雅地完成。特别是,我正在寻找 liftError 的替代品,我认为我不应该为自己定义。

制作 gateway 的最直接方法是什么?和 inner一起工作而不改变他们的类型?

最佳答案

如果你只是稍微改变一下类型,你根本不需要做任何提升。

{-# LANGUAGE FlexibleContexts #-}

gateway :: Bool -> ErrorT String Identity Int
gateway = inner

inner :: MonadError String m => Bool -> m Int
inner True = return 5
inner False = throwError "test"
MonadError有两个实例 ErrorTEither ,这样你就可以使用 inner既。

关于haskell - 将错误值提升到 ErrorT monad 转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10016677/

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