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:
parent
b6c1f670ef
commit
10f8c711da
|
@ -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 =
|
||||||
|
|
Loading…
Reference in New Issue