我是 monad 转换器的新手,所以很抱歉这个简单的问题。
我有值(value)val :: MaybeT IO String
和功能 fn :: String -> IO [String]
.
所以绑定(bind)后我有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 中应用纯函数。 lift
和 liftIO
用于将 Action 提升到变压器中。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
关于haskell - Monad 转换器 monad 重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16637221/