I&#39;m trying to make a function that uses another monadic function inside a preexisting monad, and I&#39;m having trouble.<br>Basically my problem boils down to this. I have three monadic functions with the following types:<br>

f :: A -&gt; M B<br>g :: B -&gt; N C<br>h :: C -&gt; M D<br>(M and N are in the monad class)<br>I want a function i where <br>i :: A -&gt; M (N D)<br><br>the best I can come up with is:<br>i :: A -&gt; M (N (M D))<br>i a = liftM (liftM h) =&lt;&lt; (return . g) (f a)<br>

<br>I&#39;m starting to feel pretty sure that what I&#39;m going for is impossible. Is this the case?