cimple-0.0.2: src/Language/Cimple/Graph.hs
{-# LANGUAGE RecordWildCards #-}
{-# LANGUAGE StrictData #-}
module Language.Cimple.Graph
( Graph
, fromEdges
, edges
) where
import qualified Data.Graph as G
data Graph node key = Graph
{ graph :: G.Graph
, nodeFromVertex :: G.Vertex -> (node, key, [key])
, vertexFromKey :: key -> Maybe G.Vertex
}
fromEdges :: Ord key => [(node, key, [key])] -> Graph node key
fromEdges es = Graph{..}
where
(graph, nodeFromVertex, vertexFromKey) = G.graphFromEdges es
edges :: Graph node key -> [(key, key)]
edges Graph{..} = map resolve . G.edges $ graph
where
resolve (from, to) =
let
(_, from', _) = nodeFromVertex from
(_, to', _) = nodeFromVertex to
in
(from', to')