I like the idea. This is similar to guard (MonadPlus m => Bool -> m ()), so maybe exploit that similarity for naming. Suggestions: * guardp (for "predicate") * guardf (for "function") * guardWith I wouldn't be opposed to cond, either. On 21/12/14 12:54, Nikita Volkov wrote:
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