lift
下位のモナドの計算を、上位のモナドスタックに持ち上げる
モナドスタックが深くなるとlist $ lift $ lift $ fooのようにしないといけない 定義
code:hs
class MonadTrans t where
lift :: Monad m => m a -> t m a
tはモナド変換子
例
code:haskell
import Control.Monad.Trans
import Control.Monad.Trans.Maybe
example :: MaybeT IO ()
example = do
lift (putStrLn "Hello") -- IO の計算を MaybeT IO に持ち上げる
lift (putStrLn "World")
IO の計算を MaybeT IO の文脈に持ち上げている
これがないと、putStrLn(IO ())を MaybeT IO () の中で直接呼べない