liftM の使い方が分からなかったので調べてみました。 ghci> :m + Control.Monad ghci> :t liftM liftM :: (Monad m) => (a1 -> r) -> m a1 -> m r liftM は a1 を引数に r を帰す関数と モナドのインスタンス a1 を引数にとり、 モナドの r を返す。 つまり、a1 を引数に r を帰す普通の関数をモナドにも適用出来るようにするもの、って理解で良いかな。 「liftM関連 - おっぱい大魔神の日記」の例が分かりやすい。 import Control.Monad str = return "Haskell"::Maybe String main = print $ liftM length str length はリストを引数にリストの長さを返す関数ですから、以下のようにそのままではMaybe型の