
I tend to use `pure` and `mfilter` for this case:
\x -> fromMaybe 0 $ mfilter (> 0) $ pure (x - 10)
-- ocharles
On Sun, Dec 21, 2014 at 10:54 AM, Nikita Volkov
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
_______________________________________________ Libraries mailing list Libraries@haskell.org http://www.haskell.org/mailman/listinfo/libraries