Folks,
I have recently been referred to a paper by Duggan and Ophel, about
"Type-checking Multi-parameter type classes" [1]. I think it will be
useful to consider the following.
----------------------------------------------------------------------
1. "Domain-driven unifying overload resolution" (DDUOR, so-called in
definition 4.1 in [1]) should not fail to terminate;
i.e. satisfiability is not undecidable (see system CT [2]). DDUOR
should consider the *set* of constraints (in C, in def. 4.1), instead
of one after another, for finding unifying substitions (\theta'' in
def. 4.1).
For the example (page 17 of [1]):
class F a b where f:: a -> b -> Int
instance F Int Float where f x y = 0
instance F a b => F [a] [b] where f [x] [y] = f x y
g x y = (f [x] y) + (f y [x])
the definition of g will be detected as erroneous (not well-typed) if
the *set* of constraints is considered for finding the unifying
substitution, instead of one constraint after another. In this way,
DDUOR terminates.
I think full details will not be needed, but this can be (easily)
understood by reading/following the definition of sats in system CT.
--------------------------------------------------------------------
2. The usefulness of multi-parameter type classes has been hindered by
the restrictiveness of the rule for detecting ambiguity. Instead of
tv(P) \subseteq tv(t),
where P is the set of constraints and t is the simple type,
the rule for nonambiguity should be
P = P |* tv (t,G)
where |* denotes "constraint projection" and G the typing context. For
the definition of |* see [3]; the idea is to include constraints that
have type variables in t and G and constraints that have type
variables previously included. In the example:
For: P = F a b and t = a
We have that: P => t is not ambiguous
Since: P |* {a} = P
This rule would allow multi-parameter type classes to be used in
(well-known) compelling examples, without giving rise to ambiguities.
Carlos
[1] Type-checking multi-parameter type classes, Dominic Duggan and
John Ophel, to appear in JFP.
[2] Type Inference for Overloading, Carlos Camar�o and Luc�lia
Figueiredo, Technical report UFMG, available at
http://www.dcc.ufmg.br/~camarao/jfp-ct.ps.gz.
[3] Overloading and Coherence, Carlos Camar�o and Luc�lia Figueiredo,
Technical report UFMG, available at
http://www.dcc.ufmg.br/~camarao/overloading-and-coherence.ps.gz .
_______________________________________________
Haskell mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/haskell