[perform occurs check before splitting boxyvars.
John Meacham <john@repetae.net>**20060302063228] hunk ./FrontEnd/Tc/Unify.hs 89
+-- might as well return flattened type
+-- we can skip the occurs check for boxy types
+occursCheck u@MetaVar { metaType = Tau } t = do
+    tt <- flattenType t
+    when (u `elem` freeMetaVars tt) $ unificationError (TMetaVar u) tt -- occurs check
+    return tt
+occursCheck u t = return t
+
hunk ./FrontEnd/Tc/Unify.hs 128
-    bm (TArrow s1 s2) (TMetaVar mv) = do
+    bm a@(TArrow s1 s2) (TMetaVar mv) = do
hunk ./FrontEnd/Tc/Unify.hs 130
+        occursCheck mv a
hunk ./FrontEnd/Tc/Unify.hs 147
-        --printRule $ "CEQ1: " ++ pprint a
+        printRule $ "CEQ1: " ++ prettyPrintType a
+        a <- occursCheck mv a
hunk ./FrontEnd/Tc/Unify.hs 156
+        a <- occursCheck mv a
hunk ./FrontEnd/Tc/Unify.hs 175
-    bm (TForAll vs (ps :=> tbody)) (TMetaVar mv) = do
+    bm a@(TForAll vs (ps :=> tbody)) (TMetaVar mv) = do
+        a <- occursCheck mv a