diff --git a/src/Data/OrderedMap.hs b/src/Data/OrderedMap.hs index 09f37ae..d534332 100644 --- a/src/Data/OrderedMap.hs +++ b/src/Data/OrderedMap.hs @@ -7,11 +7,13 @@ module Data.OrderedMap ( , get , keys , lookup + , mapi + , set , toList ) where -import Data.Map (Map, (!)) -import qualified Data.Map as Map (fromList, lookup) +import Data.Map (Map, (!), mapWithKey) +import qualified Data.Map as Map (fromList, insert, lookup, member) import Prelude hiding (lookup) data OrderedMap k a = OrderedMap { @@ -56,6 +58,16 @@ get k = (! k) . assoc lookup :: Ord k => k -> OrderedMap k a -> Maybe a lookup k = (Map.lookup k) . assoc +set :: Ord k => k -> a -> OrderedMap k a -> OrderedMap k a +set k v orderedMap@(OrderedMap {assoc}) + | Map.member k assoc = orderedMap {assoc = Map.insert k v assoc} + | otherwise = orderedMap + +mapi :: Ord k => (k -> a -> b) -> OrderedMap k a -> OrderedMap k b +mapi f orderedMap = orderedMap { + assoc = mapWithKey f $ assoc orderedMap + } + {- cons :: Ord k => k -> a -> OrderedMap k a -> OrderedMap k a cons k a orderedMap =