summaryrefslogtreecommitdiff
path: root/1415/files/practicum/RefactorXX.dcl
diff options
context:
space:
mode:
authorCamil Staps2016-02-02 19:24:50 +0100
committerCamil Staps2016-02-02 19:24:50 +0100
commita7d7542dc646a5fd124ef71e71ce260889f1701b (patch)
tree04ed89503bbb3cc9933273a1326a53ca724c3492 /1415/files/practicum/RefactorXX.dcl
parentweek6 camil: working positioning of lines by putting empties at left and righ... (diff)
Moved to 1415 directoryHEADmaster
Diffstat (limited to '1415/files/practicum/RefactorXX.dcl')
-rw-r--r--1415/files/practicum/RefactorXX.dcl26
1 files changed, 26 insertions, 0 deletions
diff --git a/1415/files/practicum/RefactorXX.dcl b/1415/files/practicum/RefactorXX.dcl
new file mode 100644
index 0000000..4b7748f
--- /dev/null
+++ b/1415/files/practicum/RefactorXX.dcl
@@ -0,0 +1,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