Write an IntMap module to clean up indexed access code.

This commit is contained in:
Danila Fedorin 2019-05-28 18:16:29 -07:00
parent e3ccab2c82
commit 72e134ee79
1 changed files with 30 additions and 0 deletions

30
src/CacheSim/IntMap.elm Normal file
View File

@ -0,0 +1,30 @@
module CacheSim.IntMap exposing (..)
type alias IntMap a = List a
intMapGet : Int -> IntMap a -> Maybe a
intMapGet i m =
case (i, m) of
(_, []) -> Nothing
(0, (x::xs)) -> Just x
(n, (x::xs)) -> intMapGet (n-1) xs
intMapUpdate : Int -> (a -> a) -> IntMap a -> IntMap a
intMapUpdate i f m =
case (i, m) of
(_, []) -> []
(0, (x::xs)) -> (f x)::xs
(n, (x::xs)) -> intMapUpdate (n-1) f xs
intMapPut : Int -> a -> IntMap a -> IntMap a
intMapPut i v = intMapUpdate i (\_ -> v)
intMapFind : (a -> Bool) -> IntMap a -> Maybe Int
intMapFind f m =
let
findHelper n l =
case l of
[] -> Nothing
(x::xs) -> if f x then Just n else findHelper (n - 1) xs
in
findHelper 0 m