module Data.Graph.DAG
( module Data.Graph.DAG.Edge
, module Data.Graph.DAG.Edge.Utils
, module Data.Graph.DAG.Node
, DAG (..)
, glookup
) where
import Data.Graph.DAG.Edge
import Data.Graph.DAG.Edge.Utils
import Data.Graph.DAG.Node
import Data.List (lookup)
import Data.Singletons
import Data.Proxy
import Data.Maybe (fromJust)
data DAG es x u a = DAG { getEdgeSchema :: (EdgeSchema es x u)
, getNodeSchema :: (NodeSchema a)
}
instance Functor (DAG es x u) where
fmap f (DAG es xs) = DAG es $ fmap f xs
glookup :: String -> DAG es x u a -> Maybe a
glookup k (DAG _ xs) = nlookup k xs
gspanningtrees :: SingI (SpanningTrees' es '[]) =>
DAG es x u a -> [RTree a]
gspanningtrees g = fmap replace $ espanningtrees $ getEdgeSchema g
where
replace = fmap $ fromJust . flip glookup g
gtree :: SingI (SpanningTrees' es '[]) =>
String -> DAG es x unique a -> Maybe (RTree a)
gtree k g = fmap (fmap $ fromJust . flip glookup g) $ etree k $ getEdgeSchema g