Yeah, here's a program which causes GHC to hang on compilation, but
causes no problem for hugs.  Does this qualify as higher-order unification?

newtype X a = X (X a -> a)

selfapp :: X a -> a
selfapp self@(X f) = f self

omega :: a
omega = selfapp (X selfapp)

loop = omega :: ()

y f = (f . selfapp) (X (f . selfapp))

fact0 f n = if n==0 then 1 else n * f (n-1)

fact = y fact0

-- Lyle Kopnicky

Carl Witty wrote:

On Tue, 2004-08-31 at 10:00, Chung-chieh Shan wrote:


The rationale for disallowing matching partially-applied type synonyms
is that higher-order unification is undecidable.



Higher-order unification is worse than just undecidable (after all, GHC's extended Haskell already includes constructs which are undecidable, which means that sometimes the compiler will loop forever); it's ambiguous. There can be multiple unifiers, none of which is the most general. See my earlier Haskell-cafe message for the trouble this can cause (search for "<technical note>"):

        http://www.haskell.org/pipermail/haskell-cafe/2004-March/005965.html

Carl Witty





_______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to