[Haskell-cafe] Re: Are type synonym families really equivalent to fundeps?

ChrisK haskell at list.mightyreason.com
Mon Sep 3 20:00:55 EDT 2007

Ah... I see that I have a bug in my proposal, perhaps corrected below.

>> 2. In the second and fourth instances, the type variable x appears twice 
>> in the parameters of the type function built from the fundep (a b -> c).  
>> This causes an error.  If I try adding (x ~ x') to the context and 
>> making one of them x' instead of x, I get different errors.

I see the problem with the x parameter now:

>> I'm starting to this this is an example of using functional dependencies 
>> that has no translation to type families.  Can anyone free me of such 
>> thoughts?
>> Code with fundeps is:
>>   data Var a  = Var Int (Maybe String)
>>   data RHS a b = RHS a b
>>   class Action t a b c | a -> t, a b -> c, a c -> b
>>   instance                     Action  t  ()               y         y
>>   instance                     Action  t  (Var x)          (x -> y)  y
>>   instance                     Action  t  [t]              y         y
>>   instance (Action t a b c) => Action  t  (RHS (Var x) a)  (x -> b)  c
>>   instance (Action t a b c) => Action  t  (RHS [t]     a)  b         c
> I have never used associated types or type families.  I assume you cannot rely
> on GHC lazy goodwill for the a->t constraint.  You will have to be explicit.
> Not using associated types but type families I think the syntax should be:

> [snip]

> type instance A_C_B (RHS (Var x) a) c = x -> A_C_B a c

The above is the corrected line. I had forgotten the (x->) on the RHS.

> [snip]

More information about the Haskell-Cafe mailing list