我对monad transformers是个新手,所以很抱歉这个问题很简单。我有值val :: MaybeT IO String和函数fn :: String -> IO [String]。所以在绑定之后,我就有了val >>= liftM fn :: MaybeT IO (IO [String])。如何删除重复的IO monad并获得MaybeT IO [String]类型的结果
发布于 2013-05-20 01:22:49
使用lift (或liftIO)代替liftM。
> :t val >>= lift . fn
val >>= lift . fn :: MaybeT IO [String]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 ahttps://stackoverflow.com/questions/16637221
复制相似问题