
Quoth Nicola Paolucci, nevermore:
Prelude> :t liftM2 Prelude> liftM2 :: (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r
Can someone help me understand what's happening here ? What does a Monad have to do with a simple subtraction ? What is actually the "m" of my example ?
I'm honestly not sure what the actual Monad m is in this case. I'm sure some enlightened individual will help us out. Maybe Identity? But I thought you might find this handy --- the interactive console will give you the type of whole expressions, not just bare functions. It can be pretty helpful when trying to decode typery.
:t liftM2 liftM2 :: (Monad m) => (a1 -> a2 -> r) -> m a1 -> m a2 -> m r :t liftM2 (-) liftM2 (-) :: (Num a1, Monad m) => m a1 -> m a1 -> m a1 :t liftM2 (-) snd liftM2 (-) snd :: (Num b) => ((a, b) -> b) -> (a, b) -> b :t liftM2 (-) snd fst liftM2 (-) snd fst :: (Num a) => (a, a) -> a
Cheers, D.