[boxy types updates
John Meacham <john@repetae.net>**20060210104651] hunk ./FrontEnd/Tc/Main.hs 55
-    --(_,t) <- skolomize t
+    (_,t) <- skolomize t
hunk ./FrontEnd/Tc/Main.hs 69
---    sc <- freshSigma sc
---    sc <- freshInstance sc
hunk ./FrontEnd/Tc/Main.hs 74
---    sc <- freshSigma sc
- --   sc <- freshInstance sc
hunk ./FrontEnd/Tc/Main.hs 79
-    t `boxyMatch` typ
+    t `subsumes` typ
hunk ./FrontEnd/Tc/Main.hs 153
+            varBind mv (b1 `fn` b2)
hunk ./FrontEnd/Tc/Main.hs 155
-            --varBind mv (b1 `fn` b2)
-            boxyMatch (TMetaVar mv) (b1 `fn` b2)
+            --boxyMatch (TMetaVar mv) (b1 `fn` b2)
hunk ./FrontEnd/Tc/Main.hs 158
-            box <- newBox Star
-            s1' `boxyMatch` box
-            (p',env) <- tcPat p box
+            --box <- newBox Star
+            --s1' `boxyMatch` box
+            (p',env) <- tcPat p s1'
hunk ./FrontEnd/Tc/Main.hs 169
-            --(_,s) <- skolomize s
+            (_,s) <- skolomize s
hunk ./FrontEnd/Tc/Main.hs 312
+{-
hunk ./FrontEnd/Tc/Main.hs 319
+-}
hunk ./FrontEnd/Tc/Main.hs 321
+tiPat (HsPList pats@(_:_)) (TAp t v) | t == tList = do
+    --v <- newBox Star
+    --TAp tList v `boxyMatch` typ
+    --typ `subsumes` TAp tList v
+    ps <- mapM (`tcPat` v) pats
+    return (HsPList (fsts ps), mconcat (snds ps))
hunk ./FrontEnd/Tc/Main.hs 416
+            varBind mv (b1 `fn` b2)
hunk ./FrontEnd/Tc/Main.hs 418
-            --varBind mv (b1 `fn` b2)
-            (TMetaVar mv) `boxyMatch`  (b1 `fn` b2)
+            --(TMetaVar mv) `boxyMatch`  (b1 `fn` b2)
hunk ./FrontEnd/Tc/Main.hs 421
-            box <- newBox Star
-            (p',env) <- tcPat p box
-            s1' `boxyMatch` box
+            --box <- newBox Star
+            (p',env) <- tcPat p s1'
+            --s1' `boxyMatch` box
hunk ./FrontEnd/Tc/Main.hs 435
-            --(_,s) <- skolomize s
+            (_,s) <- skolomize s
hunk ./FrontEnd/Tc/Main.hs 700
-        --v <- newTVar Star
-        (v) <- newBox Star
-        addPreds [IsIn class_Num v]
-        return v
+    v <- newVar Star
+    return $ TForAll [v] ([IsIn class_Num (TVar v)] :=> TVar v)
+    --(v) <- newBox Star
+    --addPreds [IsIn class_Num v]
+    --return v
hunk ./FrontEnd/Tc/Main.hs 707
-        --v <- newTVar Star
-        (v) <- newBox Star
-        addPreds [IsIn class_Fractional v]
-        return v
+    v <- newVar Star
+    return $ TForAll [v] ([IsIn class_Fractional (TVar v)] :=> TVar v)
+    --    (v) <- newBox Star
+    --    addPreds [IsIn class_Fractional v]
+    --    return v
hunk ./FrontEnd/Tc/Monad.hs 21
+    newVar,
hunk ./FrontEnd/Tc/Monad.hs 43
+import qualified Data.Set as Set
hunk ./FrontEnd/Tc/Monad.hs 69
-    -- Used by new typechecker only
hunk ./FrontEnd/Tc/Monad.hs 71
+    tcCurrentScope      :: Set.Set Atom,
hunk ./FrontEnd/Tc/Monad.hs 92
+-- | run a computation with a local environment
+--localScopeEnv :: [Tyvar] -> Tc a -> Tc a
+--localScopeEnv te = local (tcCurrentScope_u (te `Set.union`))
+
hunk ./FrontEnd/Tc/Monad.hs 292
-generalize r = quantify (freeMetaVars r) [] r
+generalize r = do
+    r <- flattenType r
+    quantify (freeMetaVars r) [] r
hunk ./FrontEnd/Tc/Monad.hs 301
-    let mm =  Map.fromList  [ (metaUniq mv,(TVar v)) | v <- nvs |  mv <- vs ]
-        rr = inst mm mempty r
-        ps' = inst mm mempty ps
+    sequence_ [ varBind mv (TVar v) | v <- nvs |  mv <- vs ]
+    ret <- flattenType (ps :=> r)
+    return $ TForAll nvs ret
+    --return $ TForAll nvs (ps' :=> rr)
+    --let mm =  Map.fromList  [ (metaUniq mv,(TVar v)) | v <- nvs |  mv <- vs ]
+    --    rr = inst mm mempty r
+    --    ps' = inst mm mempty ps
hunk ./FrontEnd/Tc/Monad.hs 309
-    return $ TForAll nvs (ps' :=> rr)
+    --return $ TForAll nvs (ps' :=> rr)
hunk ./FrontEnd/Tc/Monad.hs 347
-                putStrLn $ "varBind: " ++ pprint u <+> prettyPrintType t 
+                putStrLn $ "varBind: " ++ pprint u <+> prettyPrintType t
hunk ./FrontEnd/Tc/Unify.hs 23
-    --(s1,_,_) <- unbox s1
-    --(s2,_,_) <- unbox s2
+    (s1,_,_) <- unbox s1
+    (s2,_,_) <- unbox s2
hunk ./FrontEnd/Tc/Unify.hs 39
-    sub s1@(TForAll as (_ :=> _))  r2  = do   -- isRho' r2
+    sub s1@(TForAll as (_ :=> _))  r2 | isRho' r2 = do   -- isRho' r2
hunk ./FrontEnd/Tc/Unify.hs 42
-        --(bs,r1') <- boxySpec s1
hunk ./FrontEnd/Tc/Unify.hs 43
---        let f (_,bs) = do
---            bs' <- sequence [ openBox b >>= findType | ~TBox { typeBox = b } <- bs]
---            unifyList bs'
---        mapM_ f bs
-        --bs <- mapM (const $ newBox Star) as
-        --inst (Map.fromList $ zip (map tyvarAtom as) (snds bs)) r1 `subsumes` r2
hunk ./FrontEnd/Tc/Unify.hs 44
-    -- CON (??)
-    sub s1 s2 | (TCon _,_) <- fromTAp s1 = s1 `boxyMatch` s2
+    -- CON
+    sub s1 s2 | (_,(_:_)) <- fromTAp s1 = s1 `boxyMatch` s2
hunk ./FrontEnd/Tc/Unify.hs 64
-    -- BMONO & MONO
-    sub a b = boxyMatch a b
-    --sub a b | isTau a && isTau b = unify a b
+    -- BMONO
+    sub a (TMetaVar mv) | isTau a  = varBind mv a
+    -- MONO
+    sub a b | isTau a && isTau b = unify a b
hunk ./FrontEnd/Tc/Unify.hs 80
-    --(s1,_,_) <- unbox s1
-    --(s2,_,_) <- unbox s2
+    (s1,_,_) <- unbox s1
+    (s2,_,_) <- unbox s2