summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoe Crayne <joe@jerkface.net>2019-03-23 23:33:58 -0400
committerJoe Crayne <joe@jerkface.net>2019-03-23 23:33:58 -0400
commite960f50e4f1c5e35cc0f9e0d216c8d8caad0eb92 (patch)
tree86eb45b14e9fec02f17b4c9006010f8d411215bb
parentf8f3647669288b7d2b70025bef77382ce6420e37 (diff)
Slightly cleaner code when using side-effect expressions.
-rw-r--r--monkeypatch.hs16
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
607grokStatement 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-}
613grokStatement fe (CBlockStmt (CExpr mexpr _)) = do 604grokStatement 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