diff options
-rw-r--r-- | monkeypatch.hs | 16 |
1 files changed, 6 insertions, 10 deletions
diff --git a/monkeypatch.hs b/monkeypatch.hs index a6c4db9..5228dce 100644 --- a/monkeypatch.hs +++ b/monkeypatch.hs | |||
@@ -601,18 +601,14 @@ grokStatement fe (CBlockStmt (CExpr (Just (CUnary CPostIncOp (CMember (CVar cv0 | |||
601 | (hsvar v)) | 601 | (hsvar v)) |
602 | (hsvar "succ")) ">>" (hsvar k1) | 602 | (hsvar "succ")) ">>" (hsvar k1) |
603 | } | 603 | } |
604 | {- | ||
605 | -- TODO: Are any above cases CBlockStmt (CExpr ...) neccessary? | ||
606 | -- XXX In next case after this, mexpr is always Nothing | ||
607 | grokStatement fe (CBlockStmt (CExpr (Just expr) _)) = do | ||
608 | (ss,x) <- grokExpression fe expr | ||
609 | let k = uniqIdentifier "go" $ foldr Map.union Map.empty $ map compFree ss ++ map compIntro ss | ||
610 | g = Computation Map.empty Map.empty (hsvar k) | ||
611 | return $ fmap (FormalLambda k) $ foldr applyComputation g ss | ||
612 | -} | ||
613 | grokStatement fe (CBlockStmt (CExpr mexpr _)) = do | 604 | grokStatement fe (CBlockStmt (CExpr mexpr _)) = do |
614 | (ss,pre) <- maybe (Just $ (,) [] $ mkcomp id) | 605 | (ss,pre) <- maybe (Just $ (,) [] $ mkcomp id) |
615 | (fmap (second (fmap (\e -> infixFn e "seq"))) . grokExpression fe) mexpr | 606 | (let -- Discard pure value since we are interested only in side-effects. |
607 | discard = const $ mkcomp id | ||
608 | -- Alternate: keep pure-value using `seq` operator. | ||
609 | -- keep = fmap (\e -> infixFn e "seq") | ||
610 | in (fmap (second discard) . grokExpression fe)) | ||
611 | mexpr | ||
616 | let k = uniqIdentifier "go" (compFree s) | 612 | let k = uniqIdentifier "go" (compFree s) |
617 | s = foldr applyComputation (fmap ($ hsvar k) pre) ss | 613 | s = foldr applyComputation (fmap ($ hsvar k) pre) ss |
618 | return $ fmap (FormalLambda k) s | 614 | return $ fmap (FormalLambda k) s |