【问题标题】:Monad transformers monad duplicationMonad 转换器 monad 重复
【发布时间】:2013-05-19 17:08:29
【问题描述】:

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

【问题讨论】:

    标签: haskell io monads monad-transformers maybe


    【解决方案1】:

    使用lift(或liftIO)代替liftM

    > :t val >>= lift . fn
    val >>= lift . fn :: MaybeT IO [String]
    

    liftM 用于在 monad 中应用纯函数。 liftliftIO 用于将动作提升到变压器中。

    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
    

    【讨论】:

      猜你喜欢
      • 2021-11-27
      • 1970-01-01
      • 2018-02-06
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多