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 =