module Data.Graph.Dom.Internal where
import Data.Graph.Dom as D
import Data.Foldable as F
import Data.List
import Data.IntMap.Strict as IM
import Data.IntSet as IS
newline :: [Char]
newline = "\n"
asDotFile :: D.Graph -> String
asDotFile g =
let pprNode :: (Int, IntSet) -> String
pprNode (node,targets) =
concat $ intersperse newline $ fmap (pprEdge node) $ IS.toList targets
pprEdge v u = show v ++ " -> " ++ show u ++ ";"
in "digraph G {" ++ newline ++
(concat $ intersperse newline $ fmap pprNode (IM.toList g)) ++ newline ++
"}"