ソースを参照

Add some more augmented assignment operators.

Lucas Stadler 13 年 前
コミット
b49d9d9c55
共有1 個のファイルを変更した7 個の追加2 個の削除を含む
  1. 7 2
      hs/ImperativeProgramming.hs

+ 7 - 2
hs/ImperativeProgramming.hs

@ -29,8 +29,13 @@ instance Monad (Imperative a) where
29 29
    return x = Imperative $ \env -> (env, x)
30 30
31 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 39
binaryOp op = \var1 var2 -> Imperative $ \env ->
35 40
    (env, fromJust $ op <$> M.lookup var1 env <*> M.lookup var2 env)
36 41