From d8aec5bf8008b054410b24d65aedd7acb685c48c Mon Sep 17 00:00:00 2001 From: Tissevert Date: Tue, 17 Mar 2020 08:43:54 +0100 Subject: [PATCH] Add Box instance for IdMap a b, remove restriction on new keys in the Map instance since it's not really needed and could be better implemented like in OrderedMap by first using 'r' --- src/PDF/Box.hs | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/src/PDF/Box.hs b/src/PDF/Box.hs index f43a3f8..efb2cc8 100644 --- a/src/PDF/Box.hs +++ b/src/PDF/Box.hs @@ -18,8 +18,10 @@ import Control.Monad.Except (ExceptT(..), runExceptT) import Control.Monad.Fail (MonadFail(..)) import Control.Monad.State (MonadState(..)) --import Control.Monad.Reader (MonadReader(..)) +import Data.Id (Id, IdMap) +import qualified Data.Id as Id (insert, lookup) import Data.Map (Map) -import qualified Data.Map as Map (insert, lookup, member) +import qualified Data.Map as Map (insert, lookup) import Data.OrderedMap (OrderedMap) import qualified Data.OrderedMap as OrderedMap (lookup, set) import Prelude hiding (fail) @@ -63,15 +65,16 @@ instance MonadFail m => Box m Index [a] a where instance (Ord k, MonadFail m) => Box m k (Map k a) a where r k = maybe (fail "Unknown key") return . Map.lookup k - w k a aMap - | Map.member k aMap = - return $ Map.insert k a aMap - | otherwise = fail "Unknown key" + w k a = return . Map.insert k a instance (Ord k, MonadFail m) => Box m k (OrderedMap k a) a where r k = maybe (fail "Unknown key") return . OrderedMap.lookup k w k a orderedMap = r k orderedMap >> return (OrderedMap.set k a orderedMap) +instance MonadFail m => Box m (Id k) (IdMap k a) a where + r k = maybe (fail "Unknown key") return . Id.lookup k + w k a = return . Id.insert k a + instance (Monad m, Box Maybe i a b) => Box m (Maybe_ i) a (Maybe b) where r (Maybe_ i) = return . r i w (Maybe_ i) (Just b) a =