<table cellspacing="0" cellpadding="0" border="0" ><tr><td valign="top" style="font: inherit;">Hi,<br><br>I don't understand what's taking place here.<br><br>From Hoogle:<br><br>=================<br><br>liftM2 :: Monad&nbsp; m =&gt; (a1 -&gt; a2 -&gt; r) -&gt; m a1 -&gt; m a2 -&gt; m r<br><br>Promote a function to a monad, scanning the monadic arguments from left to right. For example,<br><br>&nbsp;&nbsp;&nbsp; liftM2 (+) [0,1] [0,2] = [0,2,1,3]<br>&nbsp;&nbsp;&nbsp; liftM2 (+) (Just 1) Nothing = Nothing<br><br>=================<br><br>What does it mean to "promote a function to a monad?"<br><br>It would seem that the monad values must understand the function that's being promoted, like Ints understand (+).<br><br>Prelude Control.Monad&gt; liftM2 (+) (Just 1) (Just 1)<br>Just 2<br><br>But how does one add [0,1] and [0,2] to get [0,2,1,3]?<br><br>Michael <br></td></tr></table><br>