 
            
            
            
            
                13 Nov
                
                    2009
                
            
            
                13 Nov
                
                '09
                
            
            
            
        
    
                3:36 p.m.
            
        On Fri, Nov 13, 2009 at 3:26 PM, Andy Gimblett 
First a type family where the type Y is functionally dependent on the type X, and we have a function from Y to ().
class X a where type Y a enact :: Y a -> ()
This is ambiguous. Type families are not injective (that is, Y a ~ Y b
does not imply a ~ b), so there's no way for the compiler to figure
out which instance of X is being used when it encounters enact.
Given these instances,
instance X Int where
    type Y Int = Bool
    enact _ = ()
instance X Char where
    type Y Char = Bool
    enact _ = undefined
What is "enact False"?
I recall seeing a discussion of this in the GHC documentation, but I
can't seem to locate it.
-- 
Dave Menendez