Overlapping and incoherent instances
Henning Thielemann
schlepptop at henning-thielemann.de
Sun Aug 10 14:24:44 UTC 2014
Am 29.07.2014 um 11:11 schrieb Simon Peyton Jones:
> Iavor has recently implemented per-instance-declaration pragmas, so you
> can say
>
> instance {-# OVERLAPPABLE #-} Show a => Show [a] where …
>
> instance {-# OVERLAPPING #-} Show [Char] where …
>
> This is much more precise (it affects only those specific instances) and
> it is much clearer (you see it when you see the instance declaration).
>
> This new feature will be in GHC 7.10 and I’m sure you will be happy
> about that. *But I propose also to deprecate the LANGUAGE pragmas
> OverlappingInstances and IncoherentInstances*, as way to encourage
> everyone to use the new feature instead of the old big hammer. The old
> LANGUAGE pragmas will continue to work, of course, for at least another
> complete release cycle. We could make that two cycles if it was helpful.
>
> However, if you want deprecation-free libraries, it will entail a wave
> of library updates.
I think it is a good opportunity to check whether overlapping instances
are really needed. There might be cases where instances actually do not
overlap (anymore), like you encountered, and cases where a little
redesign avoids overlapping. As far as I remember I could eventually
avoid any overlapping instance in my packages.
That said, I prefer to write the pragma before the instances, like
INLINE pragmas.
More information about the Libraries
mailing list