25 lines
620 B
Haskell
25 lines
620 B
Haskell
|
module Memory where
|
||
|
|
||
|
import Base (Memory)
|
||
|
|
||
|
import qualified Data.HashMap as HM
|
||
|
|
||
|
getMemAdr :: Memory -> Int -> Int
|
||
|
getMemAdr memory adr = HM.findWithDefault 0 adr memory
|
||
|
|
||
|
setMemAdr :: Memory -> Int -> Int -> Memory
|
||
|
setMemAdr memory adr val = HM.insert adr val memory
|
||
|
|
||
|
increment :: Memory -> Int -> Memory
|
||
|
increment memory adr = HM.alter f adr memory
|
||
|
where
|
||
|
f :: Maybe Int -> Maybe Int
|
||
|
f Nothing = Just 1
|
||
|
f (Just i) = Just $ i + 1
|
||
|
|
||
|
decrement :: Memory -> Int -> Memory
|
||
|
decrement memory adr = HM.alter f adr memory
|
||
|
where
|
||
|
f :: Maybe Int -> Maybe Int
|
||
|
f Nothing = Just $ -1
|
||
|
f (Just i) = Just $ i - 1
|