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'
This commit is contained in:
parent
25e2823c75
commit
d8aec5bf80
1 changed files with 8 additions and 5 deletions
|
@ -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 =
|
||||
|
|
Loading…
Reference in a new issue