|
|
|
|
|
|
29
|
return x = Imperative $ \env -> (env, x)
|
29
|
return x = Imperative $ \env -> (env, x)
|
|
30
|
|
30
|
|
|
31
|
name .= value = Imperative $ \env -> (M.insert name value env, value)
|
31
|
name .= value = Imperative $ \env -> (M.insert name value env, value)
|
|
32
|
entedAssignment op = \name .+= value = Imperative $ \env ->
|
|
|
|
33
|
(M.insertWith (+) name value env, value + (fromJust $M.lookup name env))
|
|
|
|
|
|
32
|
augmentedAssignment op = \entedAssignment op = \name value -> Imperative $ \env ->
|
|
|
|
33
|
(M.insertWith (flip op) name value env, (fromJust $ M.lookup name env) `op` value)
|
|
|
|
34
|
(.+=) = augmentedAssignment (+)
|
|
|
|
35
|
(.-=) = augmentedAssignment (-)
|
|
|
|
36
|
(.*=) = augmentedAssignment (*)
|
|
|
|
37
|
(./=) = augmentedAssignment (/)
|
|
|
|
38
|
|
|
34
|
binaryOp op = \var1 var2 -> Imperative $ \env ->
|
39
|
binaryOp op = \var1 var2 -> Imperative $ \env ->
|
|
35
|
(env, fromJust $ op <$> M.lookup var1 env <*> M.lookup var2 env)
|
40
|
(env, fromJust $ op <$> M.lookup var1 env <*> M.lookup var2 env)
|
|
36
|
|
41
|
|