Copyright | (c) Andrey Mokhov 2016-2022 |
---|---|
License | MIT (see the file LICENSE) |
Maintainer | andrey.mokhov@gmail.com |
Stability | experimental |
Safe Haskell | None |
Language | Haskell2010 |
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.
Synopsis
- data Attribute s = (:=) s s
-
data
Quoting
- = DoubleQuotes
- | NoQuotes
-
data
Style
a s =
Style
{
- graphName :: s
- preamble :: [s]
- graphAttributes :: [ Attribute s]
- defaultVertexAttributes :: [ Attribute s]
- defaultEdgeAttributes :: [ Attribute s]
- vertexName :: a -> s
- vertexAttributes :: a -> [ Attribute s]
- edgeAttributes :: a -> a -> [ Attribute s]
- attributeQuoting :: Quoting
- defaultStyle :: Monoid s => (a -> s) -> Style a s
- defaultStyleViaShow :: ( Show a, IsString s, Monoid s) => Style a s
- export :: ( IsString s, Monoid s, Ord a, ToGraph g, ToVertex g ~ a) => Style a s -> g -> s
- exportAsIs :: ( IsString s, Monoid s, Ord ( ToVertex g), ToGraph g, ToVertex g ~ s) => g -> s
- exportViaShow :: ( IsString s, Monoid s, Ord ( ToVertex g), Show ( ToVertex g), ToGraph g) => g -> s
Graph attributes and style
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 s |
The 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.
Style | |
|
defaultStyle :: Monoid s => (a -> s) -> Style a s Source #
Default style for exporting graphs. The
vertexName
field is provided as
the only argument; the other fields are set to trivial defaults.
defaultStyleViaShow :: ( Show a, IsString s, Monoid s) => Style a s Source #
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 functions
export :: ( IsString s, Monoid s, Ord a, ToGraph g, ToVertex g ~ a) => Style a s -> g -> s Source #
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" }
exportAsIs :: ( IsString s, Monoid s, Ord ( ToVertex g), ToGraph g, ToVertex g ~ s) => g -> s Source #
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" }