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