Add ifThenElse and (?) to Data.Bool

Edward Kmett ekmett at gmail.com
Thu Nov 17 04:03:43 UTC 2016


(?) <$> fFlag <$> flagEnabled <*> flagDisabled

You probably don't want this. This performs both effects (!), regardless of
the flag, but only keeps one result.

-Edward


On Wed, Nov 16, 2016 at 11:01 PM, winter <drkoster at qq.com> wrote:

> And here’s some other stuff i can came up with it(without obscured
> readability IMHO):
>
> ...
>    -- replacement for ifM in various package, similar to (>>= when)
>
>    (mFlag >>= (?)) flagEnabled        -- mFlag :: Monad m => m Bool
>                  $ flagDisabled
>
>    -- nicer if-then-else in applicative style
>    (?) <$> fFlag <$> flagEnabled
>                  <*> flagDisabled
>
>    -- compose with predicates to define your own if
>    ifLower =  (?) . isLower
>    ifLower ‘X’ lower
>                upper
> ...
>
>
> Basically it's a good if-then-else replacement if you’re comfortable with
> point-free style.
>
>
> On 17 Nov 2016, at 11:16, winter <drkoster at qq.com> wrote:
>
> I’m totally aware of the existence of bool, i suppose (?) is mainly used
> in fully application to get a different style than if-then-else syntax, say,
>
> ...
>     isGoo <- checkGoo
>     isGoo ? goo
>           $ woo
> ...
>
>
> But like what the wiki suggested, (?) can be used in some high-order
> situations. I like this operator because the mnemonic of questioning
> meaning.
>
>
>
> On 17 Nov 2016, at 11:03, David Feuer <david.feuer at gmail.com> wrote:
>
> If ifThenElse is good for RebindableSyntax, then I'm +1 on that (but I've
> never played with that extension, so I don't really know). I'm -1 on (?).
> We already have bool, which tends to be rather more useful when partially
> applied.
>
> On Nov 16, 2016 9:43 PM, "winter" <drkoster at qq.com> wrote:
>
>> It seems this’s a very old request, see https://wiki.haskell.org/If-then-else. I’d like to see following:
>>
>>
>> ifThenElse :: Bool -> a -> a -> a
>> ifThenElse True  x _ = xifThenElse False _ y = y
>>
>>
>> infixr 1 ?(?) :: Bool -> a -> a -> a(?) = ifThenElse
>>
>>
>> in Date.Bool module, it will have advantages that:
>>
>>
>> + It’s more composable than syntax.
>>
>> + Write (xxx ? yyy $ zzz) instead of (if xxx then yyy else zzz) is more consistent with (f . g $ x) style, and save key strokes.
>>
>> + In module with RebindableSyntax enabled, you can import ifThenElse to get default behavior.
>>
>>
>> Whether or not to be exported by Prelude is another question, but Data.Bool seems a good place to start with.
>>
>>
>> Cheers~
>>
>> Winter
>>
>>
>> _______________________________________________
>> Libraries mailing list
>> Libraries at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>>
>>
>
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20161116/af38a0f6/attachment-0001.html>


More information about the Libraries mailing list