相关疑难解决方法(0)

是否有用于获取monad的变换器版本的库或类型类?

在我目前的项目中,我遇到了将各种monad变成变压器对应物的需求,例如

stateT :: Monad m => State s a -> StateT s m a
stateT stf = StateT $ return . runState stf
Run Code Online (Sandbox Code Playgroud)

为我需要的monad编写这些实用程序函数是微不足道的,但我想知道是否已经存在一个包含标准monad的这个功能的库,也许是一个抽象这种转换的类型类.就像是

class (Monad f, MonadTrans t) => LiftTrans f t | f -> t where
    liftT :: Monad m => f a -> t m a
Run Code Online (Sandbox Code Playgroud)

("升力"可能是在这里使用的错误术语,但我不确定还有什么可以称之为.)

haskell monad-transformers

11
推荐指数
1
解决办法
317
查看次数

将monad添加到变换器堆栈的中间

我正试图"半空" (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) …
Run Code Online (Sandbox Code Playgroud)

monads haskell monad-transformers

2
推荐指数
1
解决办法
79
查看次数

标签 统计

haskell ×2

monad-transformers ×2

monads ×1