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となります。