Monad变形金刚monad复制

KAc*_*ion 10 io monads haskell monad-transformers maybe

我是monad变形金刚的新手,很抱歉这个问题很简单.我有价值val :: MaybeT IO String和功能fn :: String -> IO [String].所以绑定后,我有val >>= liftM fn :: MaybeT IO (IO [String]).如何删除重复的IO monad并获取类型的结果MaybeT IO [String]

ham*_*mar 13

使用lift(或liftIO)代替liftM.

> :t val >>= lift . fn
val >>= lift . fn :: MaybeT IO [String]
Run Code Online (Sandbox Code Playgroud)

liftM用于在monad中应用纯函数.lift并且liftIO对于提升行动统一到一个变压器.

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
Run Code Online (Sandbox Code Playgroud)