[typecheck alias appliactions a little more strictly. make literals a record type
John Meacham <john@repetae.net>**20060223025335] hunk ./E/E.hs 31
-data Lit e t = LitInt Number t |  LitCons Name [e] t
+data Lit e t = LitInt { litNumber :: Number, litType :: t } |  LitCons { litName :: Name, litArgs :: [e], litType :: t }
hunk ./E/FromHs.hs 210
-            ELit (LitCons _ vs _) = valToPat' (tipe t)
+            ELit LitCons { litArgs =  vs } = valToPat' (tipe t)
hunk ./E/Show.hs 43
+
+instance PPrint String E where
+    pprint x = prettyE x
hunk ./E/TypeCheck.hs 31
+typ (EAp (ELit LitCons { litType = EPi tvr a }) b) = getType (subst tvr b a)
+typ e@(EAp (ELit LitCons { litType = ty }) b) | ty == eStar = eStar -- XXX functions might have unboxed return types in the future
+typ e@(EAp (ELit LitCons {}) b) = error $ "getType: application of type alias " ++ (render $ ePretty e)
hunk ./E/TypeCheck.hs 49
-    getType (LitInt _ t) = t
-    getType (LitCons _ _ t) = t
+    getType l = litType l
hunk ./E/TypeCheck.hs 64
-simplifyAp _ (ELit (LitCons n xs (EPi tvr r))) b = do
-        return (ELit (LitCons n (xs ++ [b]) (subst tvr b r)))
+simplifyAp _ (ELit lc@LitCons { litArgs = xs, litType = EPi tvr r }) b = do
+        return (ELit lc { litArgs = (xs ++ [b]), litType = subst tvr b r })
hunk ./E/TypeCheck.hs 85
-    fc (ELit (LitCons _ es t)) = valid t >> mapM_ valid es >> (strong' t)
+    fc (ELit LitCons { litArgs = es, litType =  t}) = valid t >> mapM_ valid es >> (strong' t)
hunk ./E/TypeCheck.hs 161
-    verifyPats' (LitCons _ xs _) = when (hasRepeatUnder id (filter (/= 0) $ map tvrNum xs)) $ fail "Case pattern is non-linear"
+    verifyPats' LitCons { litArgs = xs } = when (hasRepeatUnder id (filter (/= 0) $ map tvrNum xs)) $ fail "Case pattern is non-linear"
hunk ./E/TypeCheck.hs 239
-    fc (ELit (LitCons _ es t)) = strong' t
+    fc (ELit LitCons { litType = t }) = strong' t
hunk ./E/TypeCheck.hs 289
-    un (ELit (LitCons n xs t))  (ELit (LitCons n' ys t')) mm c | n == n' && length xs == length ys = do
+    un (ELit LitCons { litName = n, litArgs = xs, litType = t })  (ELit LitCons { litName = n', litArgs = ys, litType =  t'}) mm c | n == n' && length xs == length ys = do