10

私はモナドトランスフォーマーが初めてなので、簡単な質問で申し訳ありません。私には価値val :: MaybeT IO Stringと機能がありますfn :: String -> IO [String]。だから、バインドした後、私は持っていval >>= liftM fn :: MaybeT IO (IO [String])ます。重複した IO モナドを削除して type の結果を取得するにはどうすればよいMaybeT IO [String]ですか?

4

1 に答える 1

13

の代わりにlift(または) を使用します。liftIOliftM

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

liftMモナドに純粋関数を適用するためのものです。アクションを変圧器に持ち上げるためのものです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
于 2013-05-19T17:22:48.777 に答える