module Expr.Examples where import Language.KURE import Language.KURE.Injection import Expr.AST import Expr.Kure ----------------------------------------------------------------- inlineR :: RewriteE Expr inlineR = do (c, Var v) <- exposeT constT (lookup v c) inlineGR :: RewriteE GenericExpr inlineGR = promoteR inlineR ----------------------------------------------------------------- expr1 :: Expr expr1 = ESeq (Seq (Assign "m" (Lit 7)) (Assign "n" (Add (Lit 1) (Lit 2))) ) (Add (Var "m") (Var "n") ) result1 :: Expr result1 = ESeq (Seq (Assign "m" (Lit 7)) (Assign "n" (Add (Lit 1) (Lit 2))) ) (Add (Lit 7) (Add (Lit 1) (Lit 2)) ) test1 :: Bool test1 = apply (extractR (anytdR inlineGR)) [] expr1 == Just result1 expr2 :: Expr expr2 = ESeq (Seq (Assign "m" (Lit 7)) (Assign "n" (Add (Lit 1) (Lit 2))) ) (Add (Var "m") (Var "x") ) result2 :: Expr result2 = ESeq (Seq (Assign "m" (Lit 7)) (Assign "n" (Add (Lit 1) (Lit 2))) ) (Add (Lit 7) (Var "x") ) test2 :: Bool test2 = apply (extractR (anytdR inlineGR)) [] expr2 == Just result2 expr3 :: Expr expr3 = ESeq (Assign "m" (Lit 7) ) (Add (Var "y") (Var "x") ) test3 :: Bool test3 = apply (extractR (anytdR inlineGR)) [] expr3 == Nothing ----------------------------------------------------------------- checkTests :: Bool checkTests = and [ test1 , test2 , test3 ] -----------------------------------------------------------------