From 10f8c711dab3892b6606f1c53bf721f2097afc53 Mon Sep 17 00:00:00 2001 From: Tissevert Date: Wed, 11 Mar 2020 18:51:49 +0100 Subject: [PATCH] Implement set and mapi on OrderedMap for convenience and to write a Box instance over OrderedMap like the one over Map --- src/Data/OrderedMap.hs | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) 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 =