[add some annotations about suspensions and partial apps to the TyEnv
John Meacham <john@repetae.net>**20070509091725] hunk ./Grin/FromE.hs 106
-dumpTyEnv (TyEnv tt) = mapM_ putStrLn $ sort [ fromAtom n <+> hsep (map show as) <+> "::" <+> show t <> f z |  (n,TyTy { tySlots = as, tyReturn = t, tySiblings = z }) <- Map.toList tt] where
+dumpTyEnv (TyEnv tt) = mapM_ putStrLn $ sort [ fromAtom n <+> hsep (map show as) <+> "::" <+> show t <> f z <> g th|  (n,TyTy { tySlots = as, tyReturn = t, tySiblings = z, tyThunk = th}) <- Map.toList tt] where
hunk ./Grin/FromE.hs 109
+    g TyNotThunk = mempty
+    g x = text " " <> tshow x
hunk ./Grin/FromE.hs 223
-    con c | keepCon = return $ (n,TyTy { tySlots = keepIts as, tyReturn = TyNode, tySiblings = fmap (map convertName) sibs}) where
+    con c | keepCon = return $ (n,TyTy { tyThunk = TyNotThunk, tySlots = keepIts as, tyReturn = TyNode, tySiblings = fmap (map convertName) sibs}) where
hunk ./Grin/FromE.hs 254
-makePartials (fn,ts,rt) | 'f':_ <- show fn = ans where
-    ans = (fn,toTyTy (keepIts ts,rt)):[(partialTag fn i,toTyTy (keepIts $ reverse $ drop i $ reverse ts ,TyNode)) |  i <- [0.. length ts] ]
+tySusp fn ts = (partialTag fn 0,(toTyTy (keepIts ts,TyNode)) { tyThunk = TySusp fn })
+
+makePartials (fn,ts,rt) | 'f':_ <- show fn = (fn,toTyTy (keepIts ts,rt)):f undefined 0 (reverse ts) where
+    f _ 0 ts = tySusp fn (reverse ts):f fn 1 ts
+    f nfn n (t:ts) = (mfn,(toTyTy (reverse $ keepIts ts,TyNode)) { tyThunk = TyPApp (if keepIt t then Just t else Nothing) nfn }):f mfn (n + 1) ts  where
+        mfn = partialTag fn n
+    f _ _ [] = []
+--    ans = (fn,toTyTy (keepIts ts,rt)):[(partialTag fn i,toTyTy (keepIts $ reverse $ drop i $ reverse ts ,TyNode)) |  i <- [0.. length ts] ]
hunk ./Grin/FromE.hs 579
-        let addt (TyEnv mp) =  TyEnv $ Map.insert (partialTag n 0) (toTyTy (args',TyNode))  (Map.insert n (toTyTy (args',getType body)) mp)
+        let addt (TyEnv mp) =  TyEnv $ Map.insert sfn sft (Map.insert n (toTyTy (args',getType body)) mp)
+            (sfn,sft) = tySusp n args'
hunk ./Grin/Grin.hs 10
+    TyThunk(..),
hunk ./Grin/Grin.hs 95
+data TyThunk =
+    TyNotThunk                 -- ^ not the thunk
+    | TyPApp (Maybe Ty) Atom   -- ^ can be applied to (possibly) an argument, and what results
+    | TySusp Atom              -- ^ can be evaluated and calls what function
+    deriving(Eq,Show)
hunk ./Grin/Grin.hs 104
+    tyThunk :: TyThunk,
hunk ./Grin/Grin.hs 108
-tyTy = TyTy { tySlots = [], tyReturn = TyUnknown, tySiblings = Nothing }
+tyTy = TyTy { tySlots = [], tyReturn = TyUnknown, tySiblings = Nothing, tyThunk = TyNotThunk }