I wanted to run the map function from Data.Map, let&#39;s call it M.map, but inside a monad transformer stack including the Error monad. <br><br>M.map has this type:<br><br>M.map :: (Ord k) =&gt; (a -&gt; b)  -&gt; Map k a  -&gt; Map k b<br>
<br>However, I want to use a mapping function that has type<br><br>(Monad m) =&gt; a -&gt; m b<br><br>(i.e. errors could be thrown during the computation, a log could be written, etc)<br><br>I wrote the following. Any comments on this way of doing things?<br>
<br>mapMapM :: (Monad m, Ord k) =&gt; (a -&gt; m b) -&gt; Map k a -&gt; m (Map k b)<br>mapMapM g mapIn = do<br>  let h (k,a) = do<br>        b &lt;- g a<br>        return (k,b)<br>  y &lt;- mapM h (M.toAscList mapIn)<br>  return $ M.fromAscList y<br>
<br>