summaryrefslogtreecommitdiff
path: root/files/practicum/RefactorXX.dcl
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