[make grin known-case optimization work for literals
John Meacham <john@repetae.net>**20060124074601] hunk ./Grin/Simplify.hs 204
+isKnown NodeC {} = True
+isKnown Lit {} = True
+isKnown _ = False
+
hunk ./Grin/Simplify.hs 215
-    f (Case n@NodeC {} as) = do
+    f (Case n as) | isKnown n = do
hunk ./Grin/Simplify.hs 218
-    f (Case n@NodeC {} as :>>= lr) = do
+    f (Case n as :>>= lr) | isKnown n = do
hunk ./Grin/Simplify.hs 221
-    f (Return n@NodeC {} :>>= b :-> Case b' as :>>= lr) | b == b' = do
+    f (Return n :>>= b :-> Case b' as :>>= lr) | isKnown n, b == b' = do
hunk ./Grin/Simplify.hs 225
-    f (Return n@NodeC {} :>>= b :-> Case b' as ) | b == b' = do
+    f (Return n :>>= b :-> Case b' as ) | isKnown n, b == b' = do
hunk ./Grin/Simplify.hs 272
+        return $ f as
+    knownCase n@(Lit l _) as = do
+        mtick $ "Optimize.optimize.known-case.{" ++ show n
+        let f [] =  Error "known-case: No known case" (getType (Case n as))
+            f ((v@Var {} :-> b):_) = Return n :>>= v :-> b
+            f ((Lit l' _ :-> b):_) | l == l' = b
+            f (_:as) = f as