モナドが消える
99 questions の6問目の別解が難しい。
Prelude> Control.Monad.liftM2 (==) id reverse [1,2,3,2,1] True Prelude> Control.Monad.liftM2 (==) id reverse [1,2,3,2,4] False Prelude>
となっています。
次のように型を確認すると、
(1) Prelude> :t Control.Monad.liftM2 Control.Monad.liftM2 :: Monad m => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r (2) Prelude> :t Control.Monad.liftM2 (==) Control.Monad.liftM2 (==) :: (Eq a2, Monad m) => m a2 -> m a2 -> m Bool (3) Prelude> :t Control.Monad.liftM2 (==) id Control.Monad.liftM2 (==) id :: Eq a => (a -> a) -> a -> Bool (4) Prelude> :t Control.Monad.liftM2 (==) id reverse Control.Monad.liftM2 (==) id reverse :: Eq a => [a] -> Bool Prelude>
(2)まではMonadがあるが、(3)のところで、
liftM2の第2引数にidを与えると、関数の型からMonadがなくなってます。
ここの部分が理解できず。。