Overlapping, undecidable, incoherent -- or worse?

Stefan Reich doc at drjava.de
Thu May 20 15:47:57 EDT 2004

Simon Peyton-Jones wrote:
> As a trivial example, try
> 	f a = a |= a
> What type shall we infer for f?  
> 	f :: (Bounded a, Enum a, SemiRing a) => a -> a
> or
> 	f :: (CSemiRing a) => a -> a

This has always confused me - GHC always seems to use the strongest 
possible conditions when inferring types (CSemiRing is stronger than PO 
because it implies it). Why isn't the type just

  	f :: (PO a) => a -> a

? Isn't this the most straight-forward (and universal) typing, 
especially in the presence of overlapping/undecidable instances?


More information about the Glasgow-haskell-users mailing list