Proposal: Data.Bool.implies

David Feuer david.feuer at gmail.com
Mon Jan 18 06:14:21 UTC 2016


I think changing the Ord instance for Bool *may* be the way to go.
Yes, the lazy one is likely a bit less efficient in some cases, but I
somehow doubt many are relying on it to be fast. Moreover, people
expect most Bool operations to short-circuit (I even seem to have lost
that fight wrt the Data.Bits operations, which I firmly believe should
be *strict*).

instance Ord Bool where
  False <= _ = True
  True <= x = x

  True >= _ = True
  False >= x = not x

  False < x = x
  True < _ = False

  False > _ = False
  True > x = not x


On Mon, Jan 18, 2016 at 12:23 AM, Jon Purdy <evincarofautumn at gmail.com> wrote:
> +1. “<=” has the wrong strictness. In “a `implies` b”, “b” should not be
> evaluated if “a” is false.
>
> As a strawman, I’d propose that the Ord instance for Bool be changed—but
> this is more likely to break existing code, however slightly.
>
> On Sun, Jan 17, 2016 at 8:12 PM, David Feuer <david.feuer at gmail.com> wrote:
>>
>> -1. We already have a `<=` operator.
>>
>> On Sun, Jan 17, 2016 at 9:17 PM, Niklas Hambüchen <mail at nh2.me> wrote:
>> > I propose to add to Data.Bool:
>> >
>> >     -- | Boolean implication.
>> >     implies :: Bool -> Bool -> Bool
>> >     implies True  x = x
>> >     implies False _ = True
>> >
>> >     infix 4 `implies` -- same as (==)
>> >
>> > The request for this is quite old (see e.g.
>> >
>> > http://neilmitchell.blogspot.de/2007/02/logical-implication-in-haskell.html).
>> >
>> > I believe that by not trying to use an operator for it, and keeping it
>> > in Data.Bool, we can avoid doing anything wrong.
>> >
>> > A quick superficial search on Stackage Hoogle suggests that adding this
>> > function should create no breakage (4 packages define their own function
>> > called `implies`, none of them import Data.Bool).
>> >
>> > `infix` instead of `infixl` or `infixr` to force you to bracket it; for
>> > the same reason it has the same precedence as `==`.
>> > _______________________________________________
>> > 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
>
>


More information about the Libraries mailing list