Implement set and mapi on OrderedMap for convenience and to write a Box instance over OrderedMap like the one over Map

This commit is contained in:
Tissevert 2020-03-11 18:51:49 +01:00
parent b6c1f670ef
commit 10f8c711da
1 changed files with 14 additions and 2 deletions

View File

@ -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 =