@@ -27,6 +27,8 @@ import qualified Data.Map as Map
2727 , partitionWithKey
2828 , elems
2929 , filterWithKey
30+ , findWithDefault
31+ , insert
3032 )
3133import Data.Set (Set)
3234import qualified Data.Set as Set (empty, insert, delete, member)
@@ -293,7 +295,7 @@ incomingAt :: NT.ConnectionId -> Accessor ConnectionState (Maybe IncomingConnect
293295incomingAt cid = incoming >>> DAC.mapMaybe cid
294296
295297incomingFrom :: NT.EndPointAddress -> Accessor ConnectionState (Set NT.ConnectionId)
296−incomingFrom addr = aux >>> DAC.mapDefault Set.empty addr
298+incomingFrom addr = aux >>> strictMapDefault Set.empty addr
297299 where
298300 aux = accessor _incomingFrom (\fr st -> st { _incomingFrom = fr })
299301
@@ -755,9 +757,15 @@ splitNotif :: Identifier
755757splitNotif ident = Map.partitionWithKey (\k !_v -> ident `impliesDeathOf` k)
756758
757759--------------------------------------------------------------------------------
758−-- Strict evaluation of the state --
760+-- Auxiliary --
759761--------------------------------------------------------------------------------
760762
761763-- | Modify and evaluate the state
762764modify' :: MonadState s m => (s -> s) -> m ()
763765modify' f = StateT.get >>= \s -> StateT.put $! f s
766+
767+-- | Strict lens for Map
768+strictMapDefault :: Ord key => elem -> key -> Accessor (Map key elem) elem
769+strictMapDefault def key =
770+ accessor (Map.findWithDefault def key)
771+ (\val -> val `seq` Map.insert key val)