Nat*_*ngo 2 monads haskell monad-transformers
我正试图"半空" (ExceptT Error IO Foo)到一个(ExceptT Error (StateT Bar IO) Baz).
我试过了lift,fmap lift而且fmap 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
Run Code Online (Sandbox Code Playgroud)
忽略新ExceptT类型,你有
IO (Either Error Foo)
Run Code Online (Sandbox Code Playgroud)
你想要的
StateT Bar IO (Either Error Foo)
Run Code Online (Sandbox Code Playgroud)
(我不明白你想要什么Baz,所以我忽略了它.)
那只是lift.所以我相信你应该可以使用
ExceptT . lift . runExceptT
Run Code Online (Sandbox Code Playgroud)
正如Alec所说,这可以用以下方式编写mapExceptT:
mapExceptT lift
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
79 次 |
| 最近记录: |