Quellcode durchsuchen

Add some more augmented assignment operators.

Lucas Stadler vor 13 Jahren
Ursprung
Commit
b49d9d9c55
1 geänderte Dateien mit 7 neuen und 2 gelöschten Zeilen
  1. 7 2
      hs/ImperativeProgramming.hs

+ 7 - 2
hs/ImperativeProgramming.hs

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