[add case-of-case with join point optimization
John Meacham <john@repetae.net>**20061221035552] hunk ./E/SSimplify.hs 590
+            doCase ic@ECase { eCaseType = it, eCaseScrutinee = e, eCaseBind =  b, eCaseAlts =  as, eCaseDefault =  d } t b' as' d' = do
+                mtick (toAtom "E.Simplify.case-of-case-join")
+                n1 <- newName
+                n2 <- newName
+                let cvar = setProperty prop_ONESHOT $ tVr n1 it
+                rcc <- doCaseCont StartContext (EVar cvar) t b' as' d'
+                let fbody = ELam cvar rcc
+                    zvar = setProperties [prop_JOINPOINT,prop_ONESHOT] $ tVr n2 (EPi tvr { tvrType = it } (getType rcc))
+                nic <- flip caseBodiesMapM ic $ \body -> return $ eLet cvar body (eAp (EVar zvar) (EVar cvar))
+                done cont $ eLet zvar fbody nic { eCaseType = getType rcc }