Proposal: add ifM and whenM to Control.Monad

Herbert Valerio Riedel hvr at gnu.org
Sun Apr 20 19:59:52 UTC 2014


Hi Mario,

On 2014-04-20 at 21:10:03 +0200, Mario Pastorelli wrote:
> I would like to propose the addition of two new combinators to
> Control.Monad:
>
> ifM :: (Monad m) => m Bool -> m a -> m a -> m a
> whenM :: (Monad m) => m Bool -> m () -> m ()

[...]

> f = do
>     dirDoesntExist <- not <$> doesDirectoryExist path
>     when dirDoesntExist $ do
>       putStrLn $ "Creating directory " ++ path
>       createDirectory path

While I'm neutral on this proposal, I'd like to remind that LambdaCase
may be useful to avoid temporary variables as well (and is even more
useful for types other than Bool):

  f = doesDirectoryExist path >>= \case
        True  -> return ()
        False -> do
          putStrLn $ "Creating directory " ++ path
          createDirectory path
  
Cheers,
  hvr


More information about the Libraries mailing list