[Haskell-cafe] looking for examples of non-full Functional Dependencies

Martin Sulzmann martin.sulzmann at gmail.com
Thu Apr 17 07:37:45 EDT 2008


Sittampalam, Ganesh wrote:
> Martin Sulzmann wrote:
>   
>> Mark P Jones wrote:
>>     
>
>   
>>> In fact, the two sets of dependencies that you have given here are 
>>> provably equivalent, so it would be decidedly odd to have a "type 
>>> improvement" system that distinguishes between them.
>>>       
>
>   
>> Based on the FD-CHR formulation, for the single-range FD case we
>> get [...] which is clearly weaker.
>> [...]
>> So, I conclude that in the Haskell type improvement context 
>> there's clearly a difference among single-range and multi-range FDs.
>>     
>
> This seems like a flaw in FD-CHR, rather than a fundamental difference 
> between the dependencies.
>
>   
>> Of course, we could define multi-range FDs in terms of single-range FDs
>> which then trivially solves the "equivalence" problem (but some user 
>> may be disappointed that their multi-range FDs yield weaker improvement).
>>     
>
> Why not instead transform single-range FDs into multi-range ones where
> possible?
>
>   

That's a perfectly reasonable assumption and would establish the logical 
property that

 a -> b /\ a -> c   iff a -> b /\ c

for FDs (by definition).

But what about programmers who'd like that

C [x] y z   yields the improvement y = [b], z =[b]

where

class C a b c | a -> b c
instance C a b b => C [a] [b] [b]

It's hard to say who's right or wrong but there's a design space which needs
to be explored further.

Martin





More information about the Haskell-Cafe mailing list