liftM関連
liftMは関数の出入り口をどっちもモナド形で拡張する.
liftM :: (Monad m) => (a1 -> r) -> m a1 -> m r
liftMの使用例
http://void.yamicha.com/blog/?mode=lite_view&number=646 より.
import Control.Monad str = return "Haskell"::Maybe String main = print $ liftM length str
bash-3.2$ runhaskell.exe test.hs
Just 7
strの型はMaybe Stringであるため、このままではlengthを適用できません。しかし、liftMはMaybeを外してlengthを実行してくれます。"Haskell"は7文字(Charが7つ存在するリスト)ですから、結果はJust 7です。また、もしstrの値がNothingであれば、liftMの結果もNothingとなります。