liftM2
code:hs
liftM2 :: Monad m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
使用例
code:hs
liftM2 (+) (Just 1) Nothing -- Nothing
関数モナドに対して使うとちょっとオシャレになる
code:hs
valid :: Int -> Bool
valid = liftM2 (&&) (0<=) (<=10)
ここでのliftM2の型を具体化すると
code:hs
liftM2 :: (Int -> Int -> Bool)
-> ((->) Int) Int
-> ((->) Int) Int
-> ((->) Int) Bool
のようにmが((->) Int)になっている
以下のように書いたのと同じ意味
code:hs
valid n = 0 <= x && x <= 10
ポイントフリーになってる