Haskell 单声道变压器单声道复制

Haskell 单声道变压器单声道复制,haskell,io,monads,monad-transformers,maybe,Haskell,Io,Monads,Monad Transformers,Maybe,我是新来的蒙纳德变形金刚,所以很抱歉这个简单的问题。 我有valueval::MaybeT IO String和functionfn::String->IO[String]。 所以在绑定之后,我有了val>=liftM fn::MaybeT IO(IO[String])。如何删除重复的IO monad并获得类型为MaybeT IO[String]的结果?使用lift(或liftIO)而不是liftM > :t val >>= lift . fn val >>= li

我是新来的蒙纳德变形金刚,所以很抱歉这个简单的问题。 我有value
val::MaybeT IO String
和function
fn::String->IO[String]
。 所以在绑定之后,我有了
val>=liftM fn::MaybeT IO(IO[String])
。如何删除重复的IO monad并获得类型为
MaybeT IO[String]
的结果?

使用
lift
(或
liftIO
)而不是
liftM

> :t val >>= lift . fn
val >>= lift . fn :: MaybeT IO [String]
liftM
用于在monad中应用纯函数<代码>提升和
提升
用于将动作提升到变压器中

liftM  :: Monad m => (a -> b) -> m a -> m b
lift   :: (Monad m, MonadTrans t) => m a -> t m a
liftIO :: MonadIO m => IO a -> m a