dependency-0.1.0.0: src/Data/Dependency/Sort.hs
module Data.Dependency.Sort ( sortDeps
, asGraph
) where
import Data.Dependency.Type
import Data.Graph
import Lens.Micro
import Lens.Micro.Extras
asGraph :: [Dependency] -> (Graph, Vertex -> Dependency)
asGraph ds = (f triple, keys)
where triple = graphFromEdges (zip3 ds (_libName <$> ds) (_libDependencies <$> ds))
f = view _1
s = view _2
keys = view _1 . s triple
sortDeps :: [Dependency] -> [Dependency]
sortDeps ds = fmap find . topSort $ g
where (g, find) = asGraph ds