module Control.Distributed.Process.Internal.StrictContainerAccessors ( mapMaybe , mapDefault ) where import Prelude hiding (map) import Data.Accessor import Data.Map (Map) import qualified Data.Map as Map (lookup, insert, delete, findWithDefault) mapMaybe :: Ord key => key -> Accessor (Map key elem) (Maybe elem) mapMaybe key = accessor (Map.lookup key) (\mVal map -> case mVal of Nothing -> Map.delete key map Just val -> val `seq` Map.insert key val map) mapDefault :: Ord key => elem -> key -> Accessor (Map key elem) elem mapDefault def key = accessor (Map.findWithDefault def key) (\val map -> val `seq` Map.insert key val map)