Overlapping and incoherent instances

Iavor Diatchki iavor.diatchki at gmail.com
Tue Aug 12 01:27:46 UTC 2014


Hello,

this is clearly a bug in GHC:  where `B` and `C` are imported, there should
have been an error, saying that there is a duplicate instance of `Foo Int`.
 If there is no ticket for this already, could you please add one?

-Iavor






On Mon, Aug 11, 2014 at 12:35 PM, Dan Doel <dan.doel at gmail.com> wrote:

> On Mon, Aug 11, 2014 at 11:36 AM, Twan van Laarhoven <twanvl at gmail.com>
> wrote:
>
>> To me, perhaps naively, IncoherentInstances is way more scary than
>> OverlappingInstances.
>>
>
> ​It might be a bit naive. Most things that incoherent instances would
> allow are allowed with overlapping instances so long as you partition your
> code into two modules. So unless such a partitioning is impossible,
> overlapping instances are almost as scary as incoherent instances (unless
> the module separation somehow makes it less scary).
>
> And actually, with the way GHC handles instances, you can get more
> incoherent behavior than incoherent instances allow without enabling any
> extensions, just using modules:
>
>     module A where
>       class Foo a where foo :: a
>
>     module B where
>       import A
>       instance F​
> ​oo Int where foo = 5
>       bar :: Int ; bar = foo
>
>     module C where
>       import A
>       instance Foo Int where foo = 6
>       baz :: Int ; baz = foo
>
>     module D where
>       import B
>       import C
>
>       quux = bar + baz -- 11​
>>
> --
> ​ Dan​
>
>
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://www.haskell.org/mailman/listinfo/libraries
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/libraries/attachments/20140811/9160119b/attachment-0001.html>


More information about the Libraries mailing list