GHC allow-overlapping-instances (PART II)

Kenny haskellmail at yahoo.com.sg
Fri Oct 3 17:22:49 EDT 2003


Hi all,

Here I change the instances from

> instance C (OR T r) T
> instance C (OR r T) T
to
> instance C (OR T r) T
> instance C (OR T T) T 

and it compiles when allow-overlapping-instances is
turned on.

now I understand that GHC in fact
allow-overlapping-instances if one is more specific
than the other.

But how about 
instance C (AND (OR r1 r2) (OR r1 r2)) (OR r1 r2)  
--[1]

instance ( C (AND r1 r3) r5
	 , C (AND r2 r4) r6
	 ) => C (AND (OR r1 r2) (OR r3 r4)) (OR r5 r6) --[2]

GHC allows this with -fallow-overlapping-instances
flag on, but why? Is [1] more specific than [2] or the
other way round?

I am confused.

-Kenny
--- H X <haskellmail at yahoo.com.sg> wrote: > Date: Mon,
29 Sep 2003 13:10:25 +0800 (CST)
> From: H X <haskellmail at yahoo.com.sg>
> Subject: GHC allow-overlapping-instances
> To: haskell at haskell.org
> 
> Hi,
> 
> Does anyone have ever used this option? 
> I see no difference when I present this program to
> ghc
> with -fallow-overlapping-instances on/off:
> 
> module Test where
> 
> 
> data T = T
> data F = F
> 
> data OR a b = OR a b
> data AND a b = AND a b
> 
> class C a b | a -> b
> 
> instance C (OR T r) T
> instance C (OR r T) T
> 
> instance C (AND F r) F
> instance C (AND r F) F
> 
> -Kenny
> 
> __________________________________________________
> Do You Yahoo!?
> A free party for the most "shiok" photo! 
> http://sg.yahoo.com/shiok
>  

__________________________________________________
Do You Yahoo!?
A free party for the most "shiok" photo! 
http://sg.yahoo.com/shiok


More information about the Haskell mailing list