Copyright | (c) Andrey Mokhov 2016-2018 |
---|---|
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 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]
- 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 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.). Most fields can be empty. 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 example for the function export
.
Style | |
|
defaultStyle :: Monoid s => (a -> s) -> Style a s Source #
Default style for exporting graphs. All style settings are empty except for
vertexName
, which is provided as the only argument.
defaultStyleViaShow :: (Show a, IsString s, Monoid s) => Style a s Source #
Default style for exporting graphs whose vertices are Show
-able. All
style settings are empty except for vertexName
, which is computed from
show
.
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)] } > 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" }