[have worker wrapper transform recursivly look into product types
John Meacham <john@repetae.net>**20060719013226] hunk ./E/Demand.hs 5
+    SubDemand(..),
hunk ./E/WorkerWrapper.hs 36
+fsubs Demand.None = repeat Demand.lazy
+fsubs (Demand.Product xs) = xs ++ repeat Demand.lazy
+
hunk ./E/WorkerWrapper.hs 48
-    f (ELam t e) (Demand.S _:ss) (Fun x) ts
-       | Just con <- getProduct dataTable tt = f e ss x ((Cons con (as con),t):ts)
+    g t (Demand.S subs)
+       | Just con <- getProduct dataTable tt = (Cons con (as con),t)
hunk ./E/WorkerWrapper.hs 51
-            as con = [ (Plain,t { tvrIdent = n, tvrType = st }) | st <- slotTypes dataTable (conName con) tt | n <- tmpNames Val (tvrIdent t) ]
+            as con = [ g t { tvrIdent = n, tvrType = st } demand  | st <- slotTypes dataTable (conName con) tt | n <- tmpNames Val (tvrIdent t) | demand <- fsubs subs]
hunk ./E/WorkerWrapper.hs 53
-    f (ELam t e) (Demand.Absent:ss) (Fun x) ts | isLifted (EVar t) = f e ss x ((Absent,t):ts)
-    f (ELam t e) (_:ss) (Fun x) ts = f e ss x ((Plain,t):ts)
+    g t Demand.Absent | isLifted (EVar t) = (Absent,t)
+    g t _ = (Plain,t)
+    f (ELam t e) (demand:ss) (Fun x) ts = f e ss x (g t demand:ts)
hunk ./E/WorkerWrapper.hs 121
-        flip mapM_ sargs $ \ x -> case x of
-            --(Just (n,_),_) ->  mtick ("E.Workwrap.arg.{" ++ tvrShowName tvr ++ "." ++ show (conName n) ++ "}")
-            (Cons n _,_) -> mtick ("E.Workwrap.arg.{"  ++ show (conName n) ++ "}")
-            (Absent,_) -> mtick "E.Workwrap.arg.absent"
-            _ -> return ()
+        let argw cn (Absent,_) = mtick $ cn ++ ".absent"
+            argw cn (Cons n ts,_) = mtick  nname >> mapM_ (argw nname) ts where
+                nname = cn ++ ".{"  ++ show (conName n) ++ "}"
+            argw _ _ = return ()
+        mapM_ (argw "E.Workwrap.arg") sargs