gpt4 book ai didi

haskell - 将 monad 添加到变压器堆栈的中间

转载 作者:行者123 更新时间:2023-12-02 12:28:26 25 4
gpt4 key购买 nike

我正在尝试将 (ExceptT Error IO Foo)“半提升”为 (ExceptT Error (StateT Bar IO) Baz)

我尝试过 liftfmap liftfmap return,但都不起作用;这里有标准的习语吗?

> import Control.Monad.Except
> import Control.Monad.State
> data Error
> data Foo
> data Bar
> data Baz
> x = undefined :: ExceptT Error IO Foo
> y = undefined :: (ExceptT Error (StateT Bar IO) Baz) -> a

> f = ??? -- This is what I'm trying to find.

> :t y (f x)
y (f x) :: a

最佳答案

忽略ExceptT新类型,你有

IO (Either Error Foo)

你想要

StateT Bar IO (Either Error Foo)

(我没有看到您想要的 Baz 功能,所以我忽略它。)

这只是提升。所以我相信你应该能够使用

ExceptT . lift . runExceptT

Alec noted ,这可以使用 mapExceptT 来编写:

mapExceptT lift

关于haskell - 将 monad 添加到变压器堆栈的中间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45786924/

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