Proposal: (a -> Bool) -> a -> f a

Nikita Volkov nikita.y.volkov at gmail.com
Sun Dec 21 10:54:00 UTC 2014


I propose to add the following utility function into Control.Applicative:

cond :: (Alternative f) => (a -> Bool) -> a -> f a
cond p a = if p a then pure a else empty

Following is a typical use case:

\x -> fromMaybe 0 $ cond (> 0) $ x - 10

which is the same as

\x -> let y = x - 10 in if y > 0 then y else 0

Why the first one is better:

   1.

   The control flow is evident and goes from right to left step by step.
   It’s not scattered around like in the second example.
    2.

   No need to interrupt to imagine a name for a temporary variable.
   3.

   Less noise.

Now, since it’s generalised to Alternative one can imagine tons of other
useful cases for this.

Alternative titles:

   -

   conditional
    -

   partial

Best regards,
Nikita
​
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20141221/1e61bb0e/attachment.html>


More information about the Libraries mailing list