blob: 4b7748f275ea422c97cfb4cc2414cbbbc8ebd4ef (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
definition module RefactorXX
:: Expr = NR Int
| VAR Name
| OP Expr Operator Expr
| LET Name Expr Expr
:: Name :== String
:: Operator = PLUS | MIN | MUL | DIV
:: Val a = Result a | Undef
class fail c :: c a
class return c :: a -> c a
class (>>=) infix 0 c :: (c a) (a -> c b) -> c b
class Monad c | return, >>= c
class MonadFail c | Monad, fail c
instance fail [], Val
instance return [], Val
instance >>= [], Val
from StdClass import class toString
instance toString Expr
free :: Expr -> [Name]
remove_unused_lets :: Expr -> Expr
eval :: Expr -> c Int | MonadFail c
|