[pull Trailing update into eval if there is only a single updatable branch
John Meacham <john@repetae.net>**20060420141222] hunk ./Grin/EvalInline.hs 23
-data UpdateType = NoUpdate | TrailingUpdate | HoistedUpdate Val | SwitchingUpdate [Atom]
+data UpdateType =
+    NoUpdate                  -- ^ no update is performed
+    | TrailingUpdate          -- ^ an update is placed after the whole evaluation
+    | HoistedUpdate Val
+    | SwitchingUpdate [Atom]
hunk ./Grin/EvalInline.hs 37
+    | TrailingUpdate <- shared, [ot] <- ofts = p1 :->
+        Fetch p1 :>>= n2 :->
+        Case n2 (mapExp (:>>= n3 :-> Update p1 n3 :>>= unit :-> Return n3) (f ot):map f whnfts)
hunk ./Grin/EvalInline.hs 49
-    | HoistedUpdate (NodeC t []) <- shared = p1 :->
-        Fetch p1 :>>= n2 :->
-        Case n2 cs :>>= Tup [] :->
-        Return (NodeC t [])
hunk ./Grin/EvalInline.hs 59
-
hunk ./Grin/EvalInline.hs 84
-        | tagIsWHNF t, HoistedUpdate (NodeC t' []) <- shared  = case vs of
-            [] -> Return (Tup [])
-            _ -> error "createEval: bad thing"