An attribute is just a key-value pair, for example "shape" := "box".
Attributes are used to specify the style of graph elements during export.
Constructors
(:=) s s
:: a typeCtrl KGHC 9.14.1 · lts/ghc-9.14.x · d82dee8 · 2026-10-12
Modulealgebraic-graphs-0.8Haskell2010
Alga is a library for algebraic construction and manipulation of graphs in Haskell. See this paper for the motivation behind the library, the underlying theory, and implementation details.
This module defines functions for exporting graphs in the DOT file format.
An attribute is just a key-value pair, for example "shape" := "box".
Attributes are used to specify the style of graph elements during export.
(:=) s sThe style of quoting used when exporting attributes; DoubleQuotes is the default.
The record Style a s specifies the style to use when exporting a
graph in the DOT format. Here a is the type of the graph vertices, and s
is the type of string to represent the resulting DOT document (e.g. String,
Text, etc.). The only field that has no obvious default value is
vertexName, which holds a function of type a -> s to compute vertex
names. See the function export for an example.
StylegraphName :: sName of the graph.
preamble :: [s]Preamble (a list of lines) is added at the beginning of the DOT file body.
graphAttributes :: [Attribute s]Graph style, e.g. ["bgcolor" := "azure"].
defaultVertexAttributes :: [Attribute s]Default vertex style, e.g. ["shape" := "diamond"].
defaultEdgeAttributes :: [Attribute s]Default edge style, e.g. ["style" := "dashed"].
vertexName :: a -> sCompute a vertex name.
vertexAttributes :: a -> [Attribute s]Attributes of a specific vertex.
edgeAttributes :: a -> a -> [Attribute s]Attributes of a specific edge.
attributeQuoting :: QuotingThe quoting style used for attributes.
Default style for exporting graphs. The vertexName field is provided as the only argument; the other fields are set to trivial defaults.
Default style for exporting graphs with Show-able vertices. The vertexName field is computed using show; the other fields are set to trivial defaults.
defaultStyleViaShow = defaultStyle (fromString . show)
Export a graph with a given style.
For example:
style :: Style Int String
style = Style
{ graphName = "Example"
, preamble = [" // This is an example", ""]
, graphAttributes = ["label" := "Example", "labelloc" := "top"]
, defaultVertexAttributes = ["shape" := "circle"]
, defaultEdgeAttributes = mempty
, vertexName = \x -> "v" ++ show x
, vertexAttributes = \x -> ["color" := "blue" | odd x ]
, edgeAttributes = \x y -> ["style" := "dashed" | odd (x * y)]
, attributeQuoting = DoubleQuotes }
> putStrLn $ export style (1 * 2 + 3 * 4 * 5 :: Graph Int)
digraph Example
{
// This is an example
graph [label="Example" labelloc="top"]
node [shape="circle"]
"v1" [color="blue"]
"v2"
"v3" [color="blue"]
"v4"
"v5" [color="blue"]
"v1" -> "v2"
"v3" -> "v4"
"v3" -> "v5" [style="dashed"]
"v4" -> "v5"
}
Export a graph whose vertices are represented simply by their names.
For example:
> Text.putStrLn $ exportAsIs (circuit ["a", "b", "c"] :: AdjacencyMap Text)
digraph
{
"a"
"b"
"c"
"a" -> "b"
"b" -> "c"
"c" -> "a"
}
Export a graph using the defaultStyleViaShow.
For example:
> putStrLn $ exportViaShow (1 + 2 * (3 + 4) :: Graph Int)
digraph
{
"1"
"2"
"3"
"4"
"2" -> "3"
"2" -> "4"
}