Arg has unlawful instances

Matt parsonsmatt at gmail.com
Sat May 11 14:40:59 UTC 2019


IMO, requiring substitivity (forall a b. if a == b then forall f. f a == f
b) is a pretty onerous condition for Eq as it is used in practice. Usually
type class laws only govern how the type class methods interact with each
other and with super classes. The substitutivity law places a requirement
on the entire publicly exported interface for a type. The `Set` type in
containers is in violation of this law as well (with `f = splitRoot`).

Laws are primarily sold to developers as a means of refactoring fearlessly
- eg i can rewrite `fmap f . fmap g` into `fmap (f . g)` without altering
the meaning of the given program. I'm not sure which refactors are possible
with the substitutivity law.

Matt Parsons


On Sat, May 11, 2019 at 8:32 AM chessai . <chessai1996 at gmail.com> wrote:

> In what way is the documentation for Eq (as of base 4.12) overzealous, and
> how would you suggest it be changed?
>
> Thanks
>
> On Sat, May 11, 2019, 3:35 AM Edward Kmett <ekmett at gmail.com> wrote:
>
>> -1
>>
>> I agree with Henning on this one.
>>
>> (==) provides an equivalence relation.
>>
>> Despite the addition of some vocabulary in base 4.12 about how (==)
>> "should" be structural, that is at odds with Arg's actual purpose.
>>
>> I'd rather argue that the attempted refinement of (==)'s documentation
>> was rather overzealous than that Arg as it is defined is wrong.
>>
>> The instances are useful and follow the intent of the classes, just not
>> the extra paragraph that was bolted on sideways to the text describing Eq.
>>
>> -Edward
>>
>> On Sat, May 11, 2019 at 9:30 AM Henning Thielemann <
>> lemming at henning-thielemann.de> wrote:
>>
>>>
>>> On Fri, 10 May 2019, David Feuer wrote:
>>>
>>> > There also needs to be some documentation about the fact that the Arg
>>> > constructor allows inspection that does not respect Eq.
>>>
>>> This follows from Arg's purpose.
>>>
>> _______________________________________________
>> 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/20190511/11ac5180/attachment.html>


More information about the Libraries mailing list