[Haskell-cafe] (Un)termination of overloading resolution
oleg at pobox.com
oleg at pobox.com
Wed Feb 22 00:12:49 EST 2006
> Let's consider the general case (which I didn't describe in my earlier
> email).
>
> In case we have an n-ary type function T (or (n+1)-ary type class
> constraint T) the conditions says for each
>
> type T t1 ... tn = t
>
> (or rule T t1 ... tn x ==> t)
>
> then rank(ti) > rank(t) for each i=1,..,n
I didn't know what condition you meant for the general form. But the
condition above is not sufficient either, as a trivial modification of the
example shows. The only modification is
instance E ((->) (m ())) (() -> ()) (m ()) where
and
test = foo (undefined::((() -> ()) -> ()) -> ()) (\f -> (f ()) :: ())
Now we have t1 = ((->) (m ())) : two constructors, one variable
t2 = () -> () : three constructors
t = m () : one constructor, one variable
and yet GHC 6.4.1 loops in the typechecking phase as before.
More information about the Haskell-Cafe
mailing list