Overlapping and incoherent instances

Bertram Felgenhauer bertram.felgenhauer at googlemail.com
Thu Aug 7 15:24:53 UTC 2014


Simon Peyton Jones wrote:
> | >>On a largely unrelated note, here's another thing I don't
> | >>understand: when is OVERLAPPABLE at one instance declaration
> | >>preferable to using only OVERLAPPING at the instance declarations
> | >>that overlap it?
> 
> It's a user decision.  GHC allows
>   - OVERLAPPABLE at the instance that is being overlapped, or
>   - OVERLAPPING at the instance that is doing the overlapping, or
>   - both

I'm curious how this affects simplification of contexts. If I have

  class Foo a
  instance Foo a => Foo [a]

then GHC will simplify

  foo :: Foo [a] => a -> ()

to

  foo :: Foo a => a -> ()

Would this be prevented by declaring the Foo [a] instance as
overlappable? In other words, does OVERLAPPABLE instruct the
type checker to expect overlapping instances even if none of
them are visible?

Cheers,

Bertram


More information about the Glasgow-haskell-users mailing list