From e960f50e4f1c5e35cc0f9e0d216c8d8caad0eb92 Mon Sep 17 00:00:00 2001 From: Joe Crayne Date: Sat, 23 Mar 2019 23:33:58 -0400 Subject: Slightly cleaner code when using side-effect expressions. --- monkeypatch.hs | 16 ++++++---------- 1 file 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 (hsvar v)) (hsvar "succ")) ">>" (hsvar k1) } -{- --- TODO: Are any above cases CBlockStmt (CExpr ...) neccessary? --- XXX In next case after this, mexpr is always Nothing -grokStatement fe (CBlockStmt (CExpr (Just expr) _)) = do - (ss,x) <- grokExpression fe expr - let k = uniqIdentifier "go" $ foldr Map.union Map.empty $ map compFree ss ++ map compIntro ss - g = Computation Map.empty Map.empty (hsvar k) - return $ fmap (FormalLambda k) $ foldr applyComputation g ss --} grokStatement fe (CBlockStmt (CExpr mexpr _)) = do (ss,pre) <- maybe (Just $ (,) [] $ mkcomp id) - (fmap (second (fmap (\e -> infixFn e "seq"))) . grokExpression fe) mexpr + (let -- Discard pure value since we are interested only in side-effects. + discard = const $ mkcomp id + -- Alternate: keep pure-value using `seq` operator. + -- keep = fmap (\e -> infixFn e "seq") + in (fmap (second discard) . grokExpression fe)) + mexpr let k = uniqIdentifier "go" (compFree s) s = foldr applyComputation (fmap ($ hsvar k) pre) ss return $ fmap (FormalLambda k) s -- cgit v1.2.3