6 | dquote : String -> String
7 | dquote str = "\"" ++ str ++ "\""
9 | joinSemicolon : List String -> String
10 | joinSemicolon = joinBy "; "
18 | constructor MkModule
23 | record PkgModules where
24 | constructor MkPkgModules
26 | modules : List Module
30 | PkgsModules = List PkgModules
33 | Show PkgsModules where
34 | show pkgs = "digraph { splines=\"ortho\";" ++ subgraphs ++ edges ++ "}"
36 | depEdge : String -> String -> String
37 | depEdge srcName destName = dquote srcName ++ " -> " ++ dquote destName
39 | moduleEdge : Module -> String
40 | moduleEdge mod = joinSemicolon $
depEdge mod.name <$> mod.deps
42 | pkgEdge : PkgModules -> String
43 | pkgEdge pkg = concat $
moduleEdge <$> pkg.modules
45 | moduleNode : Module -> String
46 | moduleNode mod = dquote mod.name ++ "[style=\"filled\", fillcolor=white]"
48 | pkgSubgraph : PkgModules -> String
51 | "subgraph " ++ (dquote $
"cluster_" ++ pkg.name)
53 | ++ "style=\"filled\"; fillcolor = \"linen\";"
54 | ++ "label=" ++ dquote pkg.name ++ ";"
55 | ++ (joinSemicolon $
moduleNode <$> pkg.modules)
58 | subgraphs, edges : String
59 | subgraphs = concat $
pkgSubgraph <$> pkgs
60 | edges = concat $
pkgEdge <$> pkgs
67 | record Package where
68 | constructor MkPackage
75 | Packages = List Package
79 | show pkgs = "digraph {" ++ inner ++ "}"
81 | depEdge : String -> String -> String
82 | depEdge srcName destName = dquote srcName ++ " -> " ++ dquote destName
84 | pkgEdge : Package -> List String
85 | pkgEdge pkg = depEdge pkg.name <$> pkg.deps
87 | pkgNode : Package -> String
92 | then "style=\"filled\"; fillcolor =\"linen\";"
96 | edges = concat $
pkgEdge <$> pkgs
97 | nodes = pkgNode <$> pkgs
98 | inner = joinSemicolon (nodes ++ edges)