[Haskell-cafe] Higher-order unification

Lyle Kopnicky lists at qseep.net
Tue Aug 31 16:54:42 EDT 2004

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

More information about the Haskell-Cafe mailing list