module Graphs.PureGraphMakeConsistent(
pureGraphMakeConsistent,
) where
import qualified Data.Map as Map
import Graphs.PureGraph
pureGraphMakeConsistent :: Ord nodeInfo
=> PureGraph nodeInfo arcInfo -> PureGraph nodeInfo arcInfo
pureGraphMakeConsistent :: PureGraph nodeInfo arcInfo -> PureGraph nodeInfo arcInfo
pureGraphMakeConsistent (PureGraph {nodeDataFM :: forall nodeInfo arcInfo.
PureGraph nodeInfo arcInfo
-> Map nodeInfo (NodeData nodeInfo arcInfo)
nodeDataFM = Map nodeInfo (NodeData nodeInfo arcInfo)
nodeDataFM0}) =
let
nodeDataFM1 :: Map nodeInfo (NodeData nodeInfo arcInfo)
nodeDataFM1 = (nodeInfo
-> NodeData nodeInfo arcInfo -> NodeData nodeInfo arcInfo)
-> Map nodeInfo (NodeData nodeInfo arcInfo)
-> Map nodeInfo (NodeData nodeInfo arcInfo)
forall k a b. (k -> a -> b) -> Map k a -> Map k b
Map.mapWithKey
(\ nodeInfo
_ NodeData nodeInfo arcInfo
nodeData0 ->
let
parents0 :: [ArcData nodeInfo arcInfo]
parents0 = NodeData nodeInfo arcInfo -> [ArcData nodeInfo arcInfo]
forall nodeInfo arcInfo.
NodeData nodeInfo arcInfo -> [ArcData nodeInfo arcInfo]
parents NodeData nodeInfo arcInfo
nodeData0
parents1 :: [ArcData nodeInfo arcInfo]
parents1 = (ArcData nodeInfo arcInfo -> Bool)
-> [ArcData nodeInfo arcInfo] -> [ArcData nodeInfo arcInfo]
forall a. (a -> Bool) -> [a] -> [a]
filter
(\ ArcData nodeInfo arcInfo
arcData -> nodeInfo -> Map nodeInfo (NodeData nodeInfo arcInfo) -> Bool
forall k a. Ord k => k -> Map k a -> Bool
Map.member (ArcData nodeInfo arcInfo -> nodeInfo
forall nodeInfo arcInfo. ArcData nodeInfo arcInfo -> nodeInfo
target ArcData nodeInfo arcInfo
arcData) Map nodeInfo (NodeData nodeInfo arcInfo)
nodeDataFM0)
[ArcData nodeInfo arcInfo]
parents0
nodeData1 :: NodeData nodeInfo arcInfo
nodeData1 = NodeData :: forall nodeInfo arcInfo.
[ArcData nodeInfo arcInfo] -> NodeData nodeInfo arcInfo
NodeData {parents :: [ArcData nodeInfo arcInfo]
parents = [ArcData nodeInfo arcInfo]
parents1}
in
NodeData nodeInfo arcInfo
nodeData1
)
Map nodeInfo (NodeData nodeInfo arcInfo)
nodeDataFM0
in
PureGraph :: forall nodeInfo arcInfo.
Map nodeInfo (NodeData nodeInfo arcInfo)
-> PureGraph nodeInfo arcInfo
PureGraph {nodeDataFM :: Map nodeInfo (NodeData nodeInfo arcInfo)
nodeDataFM = Map nodeInfo (NodeData nodeInfo arcInfo)
nodeDataFM1}