<div dir="ltr">I&#39;m -1 on this, due to it just further obfuscating the fact that Data.Foldable.for_ already exists.</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Fri, May 10, 2013 at 2:13 AM, Niklas Hambüchen <span dir="ltr">&lt;<a href="mailto:mail@nh2.me" target="_blank">mail@nh2.me</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I would like to propose the addition of<br>
<br>
whenJust :: Monad m =&gt; Maybe a -&gt; (a -&gt; m ()) -&gt; m ()<br>
whenJust (Just x) f = f x<br>
whenJust _        _ = return ()<br>
<br>
to Control.Monad, in the section<br>
<br>
   &quot;Conditional execution of monadic expressions&quot;<br>
<br>
next to<br>
<br>
   guard :: MonadPlus m =&gt; Bool -&gt; m ()<br>
   when :: Monad m =&gt; Bool -&gt; m () -&gt; m ()<br>
   unless :: Monad m =&gt; Bool -&gt; m () -&gt; m ()<br>
<br>
<br>
Why?<br>
<br>
It would allow us to write more readable code and fit well into the<br>
group of similar functions of this style.<br>
<br>
Compare<br>
<br>
   mUser &lt;- lookupUser<br>
<br>
   whenJust mUser email<br>
<br>
or<br>
<br>
   whenJust mUser $ \user -&gt; do<br>
      putStrLn &quot;Mailing!&quot;<br>
      email user<br>
<br>
with some currently available alternatives:<br>
<br>
<br>
   case mUser of<br>
      Just user -&gt; do putStrLn &quot;Mailing!&quot;<br>
                      email user<br>
      Nothing   -&gt; return ()<br>
<br>
(Default base case clutter.)<br>
<br>
<br>
   import Data.Foldable<br>
<br>
   forM_ mUser $ \user -&gt; do<br>
     putStrLn &quot;Mailing!&quot;<br>
     email user<br>
<br>
(Not too intuitive/well-named here and &quot;Ambiguous occurrence forM_&quot;<br>
clash with Control.Monad.)<br>
<br>
Some more dissatisfying alternatives:<br>
<br>
<br>
   maybe (return ()) (\user -&gt; do putStrLn &quot;Mailing!&quot;<br>
                                  email user<br>
                     ) mUser<br>
<br>
<br>
   flip (maybe (return ())) mUser $ \user -&gt; do<br>
     putStrLn &quot;Mailing!&quot;<br>
     email user<br>
<br>
<br>
   import Control.Monad.Trans.Maybe<br>
   import Control.Monad.Trans (lift)<br>
<br>
   _ &lt;- runMaybeT $ return mUser &gt;&gt;= \user -&gt; lift $ do<br>
     putStrLn &quot;Mailing!&quot;<br>
     email user<br>
   return ()<br>
<br>
<br>
Alternative names:<br>
<br>
   - withJust, analog to withFile and withForeignPtr<br>
<br>
Any comments?<br>
<br>
_______________________________________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org">Libraries@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/libraries" target="_blank">http://www.haskell.org/mailman/listinfo/libraries</a><br>
</blockquote></div><br></div>