
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