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 |