
HI Niklas,
On 18 Jan 2016, at 02:17, Niklas Hambüchen
wrote: I propose to add to Data.Bool:
-- | Boolean implication. implies :: Bool -> Bool -> Bool implies True x = x implies False _ = True
Fine by me (+1)
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 `==`.
In equational logic, it makes more sense for implication to bind tighter than equivalence, and it would usually be considered as infixr a `implies` b `implies` c same as a `implies` (b `implies` c) But if this breaks something else then plain infix is fine.... That this is the same associativity rule as for function arrows is not a coincidence, by the way.
_______________________________________________ Libraries mailing list Libraries@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
Andrew Butterfield School of Computer Science & Statistics Trinity College Dublin 2, Ireland