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 , get
, keys , keys
, lookup , lookup
, mapi
, set
, toList , toList
) where ) where
import Data.Map (Map, (!)) import Data.Map (Map, (!), mapWithKey)
import qualified Data.Map as Map (fromList, lookup) import qualified Data.Map as Map (fromList, insert, lookup, member)
import Prelude hiding (lookup) import Prelude hiding (lookup)
data OrderedMap k a = OrderedMap { data OrderedMap k a = OrderedMap {
@ -56,6 +58,16 @@ get k = (! k) . assoc
lookup :: Ord k => k -> OrderedMap k a -> Maybe a lookup :: Ord k => k -> OrderedMap k a -> Maybe a
lookup k = (Map.lookup k) . assoc 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 :: Ord k => k -> a -> OrderedMap k a -> OrderedMap k a
cons k a orderedMap = cons k a orderedMap =