1 implementation module RefactorX
5 Start = map toString [E1,E2,E3,E4,E5]
7 E1 = (let x = 42 - 3 in x / 0) + (let y = 6 in y * y)
8 E2 = let x = 42 in x + (let x = 58 in x)
9 E3 = let x = 1 in let y = 2 in let x = 3 in 4
10 E4 = let x = 1 in x + y
11 E5 = (let x = 1 in x) * x
15 | OP Expr Operator Expr
18 :: Operator = PLUS | MIN | MUL | DIV
19 :: Val = Result Int | Undef
21 // expressies afdrukken:
22 instance toString Expr where
26 free :: Expr -> [Name]
28 // verwijder deelexpressies met ongebruikte let-variabelen:
29 remove_unused_lets :: Expr -> Expr
31 // evaluator met tabel van naam-waarde paren: