[make absurd type depend on its kind, now of the form Jhc@.Absurd.<kind>.
John Meacham <john@repetae.net>**20070606041454] hunk ./DataConstructors.hs 14
+    tAbsurd,
hunk ./DataConstructors.hs 196
+getConstructor n _ | Just e <- fromAbsurd  n = return emptyConstructor { conName = n, conType = e, conExpr = tAbsurd e, conInhabits = tStar }
hunk ./DataConstructors.hs 239
-tabsurd = emptyConstructor {
-            conName = tc_Absurd,
-            conType = eStar,
-            conExpr = tAbsurd eStar,
-            conInhabits = tStar
-    }
hunk ./DataConstructors.hs 251
+tAbsurd k = ELit (litCons { litName = nameAbsurd k, litArgs = [], litType = k })
+
+nameAbsurd :: E -> Name
+nameAbsurd n = toName TypeConstructor ("Jhc@.Absurd",f n "") where
+    f (ESort s) = shows s
+    f (EPi TVr { tvrType = t1 } t2) = ('^':) . shows t1 . shows t2
+    f _ = error $ "nameAbsurd: " ++ show n
+
+fromAbsurd :: Monad m => Name -> m E
+fromAbsurd n = maybeM ("fromAbsurd: " ++ show n) $ do
+    let f s = funit s `mplus` flam s
+        flam ('^':xs) = do (x,rs) <- f xs; (y,gs) <- f rs; return (EPi tvr { tvrType = x } y,gs)
+        flam _ = Nothing
+        funit ('*':xs) = return (eStar,xs)
+        funit ('#':xs) = return (eHash,xs)
+        funit ('!':xs) = return (ESort EBang,xs)
+        funit ('(':'#':')':xs) = return (ESort ETuple,xs)
+        funit _ = Nothing
+    (TypeConstructor,("Jhc@.Absurd",an)) <- return $  fromName n
+    (r,"") <- f an
+    return r
hunk ./DataConstructors.hs 465
-dataTablePrims = DataTable $ Map.fromList ([ (conName x,x) | x <- tbox:tabsurd:tarrow:primitiveTable ])
+dataTablePrims = DataTable $ Map.fromList ([ (conName x,x) | x <- tbox:tarrow:primitiveTable ])
hunk ./E/E.hs 126
-
-tAbsurd k = ELit (litCons { litName = tc_Absurd, litArgs = [], litType = k })
hunk ./Name/Names.hs 63
-tc_Absurd = toName TypeConstructor ("Jhc@","Absurd#")