[Haskell] extensible records using associated types
Manuel M T Chakravarty
chak at cse.unsw.edu.au
Tue Jun 20 11:52:25 EDT 2006
Barney Hilken:
> Similarly, it Lacks all the fields which r Lacks, except for N
> itself. This is where we really need the ordering :<: to ensure that
> m is not equal to N. There are two cases, m :<: N:
>
> > instance m :<: N, Lacks m r => Lacks m (N a r) where
> > type Extend m b (N a r) = N a (Extend m b r)
> > extend mm y (N x t) = N x (extend mm y t)
>
> and N :<: m:
>
> > instance N :<: m => Lacks m (N a r) where
> > type Extend m b (N a r) = m b (N a r)
> > extend mm y (N x t) = mm y (N x t)
This is problematic as the instance heads are distinguished only by the
context; ie, both instances are for `Lacks m (N a r)'. Haskell's
instance selection mechanism (with or without associated types) selects
instances purely by looking at the arguments of the class; hence, you
cannot use instance context as a kind of guard to guide instance
selection.
Manuel
More information about the Haskell
mailing list