graphviz-2999.20.0.3: Bindings to Graphviz for graph visualisation.

Copyright(c) Ivan Lazar Miljenovic
License3-Clause BSD-style
MaintainerIvan.Miljenovic@gmail.com
Safe HaskellNone
LanguageHaskell2010

Data.GraphViz.Types

Contents

Description

Four different representations of Dot graphs are available, all of which are based loosely upon the specifications at: http://graphviz.org/doc/info/lang.html. The DotRepr class provides a common interface for them (the PrintDotRepr, ParseDotRepr and PPDotRepr classes are used until class aliases are implemented).

Every representation takes in a type parameter: this indicates the node type (e.g. DotGraph Int is a Dot graph with integer nodes). Sum types are allowed, though care must be taken when specifying their ParseDot instances if there is the possibility of overlapping definitions. The GraphID type is an existing sum type that allows textual and numeric values.

If you require using more than one Dot representation, you will most likely need to import at least one of them qualified, as they typically all use the same names.

As a comparison, all four representations provide how you would define the following Dot graph (or at least one isomorphic to it) (the original of which can be found at http://graphviz.org/content/cluster). Note that in all the examples, they are not necessarily done the best way (variables rather than repeated constants, etc.); they are just there to provide a comparison on the structure of each representation.

digraph G {

  subgraph cluster_0 {
    style=filled;
    color=lightgrey;
    node [style=filled,color=white];
    a0 -> a1 -> a2 -> a3;
    label = "process #1";
  }

  subgraph cluster_1 {
    node [style=filled];
    b0 -> b1 -> b2 -> b3;
    label = "process #2";
    color=blue
  }
  start -> a0;
  start -> b0;
  a1 -> b3;
  b2 -> a3;
  a3 -> a0;
  a3 -> end;
  b3 -> end;

  start [shape=Mdiamond];
  end [shape=Msquare];
}

Each representation is suited for different things:

Data.GraphViz.Types.Canonical
is ideal for converting other graph-like data structures into Dot graphs (the Data.GraphViz module provides some functions for this). It is a structured representation of Dot code.
Data.GraphViz.Types.Generalised
matches the actual structure of Dot code. As such, it is suited for parsing in existing Dot code.
Data.GraphViz.Types.Graph
provides graph operations for manipulating Dot graphs; this is suited when you want to edit existing Dot code. It uses generalised Dot graphs for parsing and canonical Dot graphs for printing.
Data.GraphViz.Types.Monadic
is a much easier representation to use when defining relatively static Dot graphs in Haskell code, and looks vaguely like actual Dot code if you squint a bit.

Please also read the limitations section at the end for advice on how to properly use these Dot representations.

Synopsis

Documentation

class Ord n => DotRepr dg n where #

This class is used to provide a common interface to different ways of representing a graph in Dot form.

You will most probably not need to create your own instances of this class.

The type variable represents the current node type of the Dot graph, and the Ord restriction is there because in practice most implementations of some of these methods require it.

Methods

fromCanonical :: DotGraph n -> dg n #

Convert from a graph in canonical form. This is especially useful when using the functions from Data.GraphViz.Algorithms.

See FromGeneralisedDot in Data.GraphViz.Types.Generalised for a semi-inverse of this function.

getID :: dg n -> Maybe GraphID #

Return the ID of the graph.

setID :: GraphID -> dg n -> dg n #

Set the ID of the graph.

graphIsDirected :: dg n -> Bool #

Is this graph directed?

setIsDirected :: Bool -> dg n -> dg n #

Set whether a graph is directed or not.

graphIsStrict :: dg n -> Bool #

Is this graph strict? Strict graphs disallow multiple edges.

setStrictness :: Bool -> dg n -> dg n #

A strict graph disallows multiple edges.

mapDotGraph :: DotRepr dg n' => (n -> n') -> dg n -> dg n' #

Change the node values. This function is assumed to be injective, otherwise the resulting graph will not be identical to the original (modulo labels).

graphStructureInformation :: dg n -> (GlobalAttributes, ClusterLookup) #

Return information on all the clusters contained within this DotRepr, as well as the top-level GraphAttrs for the overall graph.

nodeInformation :: Bool -> dg n -> NodeLookup n #

Return information on the DotNodes contained within this DotRepr. The Bool parameter indicates if applicable NodeAttrs should be included.

edgeInformation :: Bool -> dg n -> [DotEdge n] #

Return information on the DotEdges contained within this DotRepr. The Bool parameter indicates if applicable EdgeAttrs should be included.

unAnonymise :: dg n -> dg n #

Give any anonymous sub-graphs or clusters a unique identifier (i.e. there will be no Nothing key in the ClusterLookup from graphStructureInformation).

Instances
Ord n => DotRepr DotGraph n # 
Instance details

Defined in Data.GraphViz.Types

Ord n => DotRepr DotGraph n # 
Instance details

Defined in Data.GraphViz.Types.Generalised

Ord n => DotRepr DotGraph n # 
Instance details

Defined in Data.GraphViz.Types.Graph

class PrintDot a where #

A class used to correctly print parts of the Graphviz Dot language. Minimal implementation is unqtDot.

Minimal complete definition

unqtDot

Methods

unqtDot :: a -> DotCode #

The unquoted representation, for use when composing values to produce a larger printing value.

toDot :: a -> DotCode #

The actual quoted representation; this should be quoted if it contains characters not permitted a plain ID String, a number or it is not an HTML string. Defaults to unqtDot.

unqtListToDot :: [a] -> DotCode #

The correct way of representing a list of this value when printed; not all Dot values require this to be implemented. Defaults to Haskell-like list representation.

listToDot :: [a] -> DotCode #

The quoted form of unqtListToDot; defaults to wrapping double quotes around the result of unqtListToDot (since the default implementation has characters that must be quoted).

Instances
PrintDot Bool # 
Instance details

Defined in Data.GraphViz.Printing

PrintDot Char # 
Instance details

Defined in Data.GraphViz.Printing

PrintDot Double # 
Instance details

Defined in Data.GraphViz.Printing

PrintDot Int # 
Instance details

Defined in Data.GraphViz.Printing

PrintDot Integer # 
Instance details

Defined in Data.GraphViz.Printing

PrintDot Word8 # 
Instance details

Defined in Data.GraphViz.Printing

PrintDot Word16 # 
Instance details

Defined in Data.GraphViz.Printing

PrintDot Version #

Ignores versionTags and assumes 'not . null . versionBranch' (usually you want 'length . versionBranch == 2').

Instance details

Defined in Data.GraphViz.Printing

PrintDot Text # 
Instance details

Defined in Data.GraphViz.Printing

PrintDot Text # 
Instance details

Defined in Data.GraphViz.Printing

PrintDot BrewerName # 
Instance details

Defined in Data.GraphViz.Printing

PrintDot BrewerScheme # 
Instance details

Defined in Data.GraphViz.Printing

PrintDot ColorScheme # 
Instance details

Defined in Data.GraphViz.Printing

PrintDot GraphvizCommand # 
Instance details

Defined in Data.GraphViz.Commands.Available

PrintDot CompassPoint # 
Instance details

Defined in Data.GraphViz.Attributes.Internal

PrintDot PortPos # 
Instance details

Defined in Data.GraphViz.Attributes.Internal

PrintDot PortName # 
Instance details

Defined in Data.GraphViz.Attributes.Internal

PrintDot X11Color # 
Instance details

Defined in Data.GraphViz.Attributes.Colors.X11

PrintDot SVGColor # 
Instance details

Defined in Data.GraphViz.Attributes.Colors.SVG

PrintDot WeightedColor # 
Instance details

Defined in Data.GraphViz.Attributes.Colors

PrintDot Color # 
Instance details

Defined in Data.GraphViz.Attributes.Colors

PrintDot Style # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

PrintDot Side # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

PrintDot Scale # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

PrintDot CellFormat # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

PrintDot VAlign # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

PrintDot Align # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

PrintDot Attribute # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

PrintDot Img # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

PrintDot Cell # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

PrintDot Row # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

PrintDot Table # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

PrintDot Format # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

PrintDot TextItem # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

PrintDot Label # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

PrintDot NodeSize # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Normalized # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Number # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Ratios # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Justification # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot ScaleType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Paths # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot VerticalPlacement # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot FocusType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot ViewPort # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot StyleName # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot StyleItem # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot STStyle # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot StartType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot SmoothType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Shape # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot RankDir # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot RankType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Root # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot QuadType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Spline # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot PageDir # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot EdgeType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Pos # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot PackMode # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Pack # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot OutputMode # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Order # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot LayerList # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot LayerID # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot LayerRangeElem # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot LayerListSep # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot LayerSep # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Overlap # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Point # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot LabelScheme # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot RecordField # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Label # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Model # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot ModeType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot GraphSize # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot SVGFontNames # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot DPoint # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot DEConstraints # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot DirType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot ClusterMode # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot Rect # 
Instance details

Defined in Data.GraphViz.Attributes.Values

PrintDot ArrowSide # 
Instance details

Defined in Data.GraphViz.Attributes.Arrows

PrintDot ArrowFill # 
Instance details

Defined in Data.GraphViz.Attributes.Arrows

PrintDot ArrowModifier # 
Instance details

Defined in Data.GraphViz.Attributes.Arrows

PrintDot ArrowShape # 
Instance details

Defined in Data.GraphViz.Attributes.Arrows

PrintDot ArrowType # 
Instance details

Defined in Data.GraphViz.Attributes.Arrows

PrintDot Attribute # 
Instance details

Defined in Data.GraphViz.Attributes.Complete

PrintDot GlobalAttributes # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

PrintDot GraphID # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

PrintDot a => PrintDot [a] # 
Instance details

Defined in Data.GraphViz.Printing

Methods

unqtDot :: [a] -> DotCode #

toDot :: [a] -> DotCode #

unqtListToDot :: [[a]] -> DotCode #

listToDot :: [[a]] -> DotCode #

PrintDot n => PrintDot (DotEdge n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

PrintDot n => PrintDot (DotNode n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

PrintDot n => PrintDot (DotSubGraph n) # 
Instance details

Defined in Data.GraphViz.Types.Canonical

PrintDot n => PrintDot (DotStatements n) # 
Instance details

Defined in Data.GraphViz.Types.Canonical

PrintDot n => PrintDot (DotGraph n) # 
Instance details

Defined in Data.GraphViz.Types.Canonical

PrintDot n => PrintDot (DotSubGraph n) # 
Instance details

Defined in Data.GraphViz.Types.Generalised

PrintDot n => PrintDot (DotStatement n) # 
Instance details

Defined in Data.GraphViz.Types.Generalised

PrintDot n => PrintDot (DotGraph n) # 
Instance details

Defined in Data.GraphViz.Types.Generalised

PrintDot n => PrintDot (DotGraph n) #

Uses the PrintDot instance for canonical DotGraphs.

Instance details

Defined in Data.GraphViz.Types.Graph

class ParseDot a where #

Minimal complete definition

parseUnqt

Instances
ParseDot Bool # 
Instance details

Defined in Data.GraphViz.Parsing

ParseDot Char # 
Instance details

Defined in Data.GraphViz.Parsing

ParseDot Double # 
Instance details

Defined in Data.GraphViz.Parsing

ParseDot Int # 
Instance details

Defined in Data.GraphViz.Parsing

ParseDot Integer # 
Instance details

Defined in Data.GraphViz.Parsing

ParseDot Word8 # 
Instance details

Defined in Data.GraphViz.Parsing

ParseDot Word16 # 
Instance details

Defined in Data.GraphViz.Parsing

ParseDot Version #

Ignores versionTags and assumes 'not . null . versionBranch' (usually you want 'length . versionBranch == 2') and that all such values are non-negative.

Instance details

Defined in Data.GraphViz.Parsing

ParseDot Text # 
Instance details

Defined in Data.GraphViz.Parsing

ParseDot Text # 
Instance details

Defined in Data.GraphViz.Parsing

ParseDot BrewerName # 
Instance details

Defined in Data.GraphViz.Parsing

ParseDot BrewerScheme # 
Instance details

Defined in Data.GraphViz.Parsing

ParseDot ColorScheme # 
Instance details

Defined in Data.GraphViz.Parsing

ParseDot GraphvizCommand # 
Instance details

Defined in Data.GraphViz.Commands.Available

ParseDot CompassPoint # 
Instance details

Defined in Data.GraphViz.Attributes.Internal

ParseDot PortPos # 
Instance details

Defined in Data.GraphViz.Attributes.Internal

ParseDot PortName # 
Instance details

Defined in Data.GraphViz.Attributes.Internal

ParseDot X11Color # 
Instance details

Defined in Data.GraphViz.Attributes.Colors.X11

ParseDot SVGColor # 
Instance details

Defined in Data.GraphViz.Attributes.Colors.SVG

ParseDot WeightedColor # 
Instance details

Defined in Data.GraphViz.Attributes.Colors

ParseDot Color # 
Instance details

Defined in Data.GraphViz.Attributes.Colors

ParseDot Style # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

ParseDot Side # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

ParseDot Scale # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

ParseDot CellFormat # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

ParseDot VAlign # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

ParseDot Align # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

ParseDot Attribute # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

ParseDot Img # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

ParseDot Cell # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

ParseDot Row # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

ParseDot Table # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

ParseDot Format # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

ParseDot TextItem # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

ParseDot Label # 
Instance details

Defined in Data.GraphViz.Attributes.HTML

ParseDot NodeSize # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Normalized # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Number # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Ratios # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Justification # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot ScaleType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Paths # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot VerticalPlacement # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot FocusType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot ViewPort # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot StyleName # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot StyleItem # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot STStyle # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot StartType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot SmoothType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Shape # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot RankDir # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot RankType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Root # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot QuadType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Spline # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot PageDir # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot EdgeType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Pos # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot PackMode # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Pack # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot OutputMode # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Order # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot LayerList # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot LayerID # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot LayerRangeElem # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot LayerListSep # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot LayerSep # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Overlap #

Note that overlap=false defaults to PrismOverlap Nothing, but if the Prism library isn't available then it is equivalent to VoronoiOverlap.

Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Point # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot LabelScheme # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot RecordField # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Label # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Model # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot ModeType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot GraphSize # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot SVGFontNames # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot DPoint # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot DEConstraints # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot DirType # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot ClusterMode # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot Rect # 
Instance details

Defined in Data.GraphViz.Attributes.Values

ParseDot ArrowSide # 
Instance details

Defined in Data.GraphViz.Attributes.Arrows

ParseDot ArrowFill # 
Instance details

Defined in Data.GraphViz.Attributes.Arrows

ParseDot ArrowModifier # 
Instance details

Defined in Data.GraphViz.Attributes.Arrows

ParseDot ArrowShape # 
Instance details

Defined in Data.GraphViz.Attributes.Arrows

ParseDot ArrowType # 
Instance details

Defined in Data.GraphViz.Attributes.Arrows

ParseDot Attribute # 
Instance details

Defined in Data.GraphViz.Attributes.Complete

ParseDot GlobalAttributes # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

ParseDot GraphID # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

ParseDot a => ParseDot [a] # 
Instance details

Defined in Data.GraphViz.Parsing

Methods

parseUnqt :: Parse [a] #

parse :: Parse [a] #

parseUnqtList :: Parse [[a]] #

parseList :: Parse [[a]] #

ParseDot n => ParseDot (DotEdge n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

ParseDot n => ParseDot (DotNode n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

ParseDot n => ParseDot (DotSubGraph n) # 
Instance details

Defined in Data.GraphViz.Types.Canonical

ParseDot n => ParseDot (DotStatements n) # 
Instance details

Defined in Data.GraphViz.Types.Canonical

ParseDot n => ParseDot (DotGraph n) # 
Instance details

Defined in Data.GraphViz.Types.Canonical

ParseDot n => ParseDot (DotSubGraph n) # 
Instance details

Defined in Data.GraphViz.Types.Generalised

ParseDot n => ParseDot (DotStatement n) # 
Instance details

Defined in Data.GraphViz.Types.Generalised

ParseDot n => ParseDot (DotGraph n) # 
Instance details

Defined in Data.GraphViz.Types.Generalised

(Ord n, ParseDot n) => ParseDot (DotGraph n) #

Uses the ParseDot instance for generalised DotGraphs.

Instance details

Defined in Data.GraphViz.Types.Graph

class (DotRepr dg n, PrintDot (dg n)) => PrintDotRepr dg n #

This class exists just to make type signatures nicer; all instances of DotRepr should also be an instance of PrintDotRepr.

Instances
(Ord n, PrintDot n) => PrintDotRepr DotGraph n # 
Instance details

Defined in Data.GraphViz.Types

(Ord n, PrintDot n) => PrintDotRepr DotGraph n # 
Instance details

Defined in Data.GraphViz.Types.Generalised

(Ord n, PrintDot n) => PrintDotRepr DotGraph n # 
Instance details

Defined in Data.GraphViz.Types.Graph

class (DotRepr dg n, ParseDot (dg n)) => ParseDotRepr dg n #

This class exists just to make type signatures nicer; all instances of DotRepr should also be an instance of ParseDotRepr.

Instances
(Ord n, ParseDot n) => ParseDotRepr DotGraph n # 
Instance details

Defined in Data.GraphViz.Types

(Ord n, ParseDot n) => ParseDotRepr DotGraph n # 
Instance details

Defined in Data.GraphViz.Types.Generalised

(Ord n, ParseDot n) => ParseDotRepr DotGraph n # 
Instance details

Defined in Data.GraphViz.Types.Graph

class (PrintDotRepr dg n, ParseDotRepr dg n) => PPDotRepr dg n #

This class exists just to make type signatures nicer; all instances of DotRepr should also be an instance of PPDotRepr.

Instances
(Ord n, PrintDot n, ParseDot n) => PPDotRepr DotGraph n # 
Instance details

Defined in Data.GraphViz.Types

(Ord n, PrintDot n, ParseDot n) => PPDotRepr DotGraph n # 
Instance details

Defined in Data.GraphViz.Types.Generalised

(Ord n, PrintDot n, ParseDot n) => PPDotRepr DotGraph n # 
Instance details

Defined in Data.GraphViz.Types.Graph

Common sub-types

data GraphID #

A polymorphic type that covers all possible ID values allowed by Dot syntax. Note that whilst the ParseDot and PrintDot instances for String will properly take care of the special cases for numbers, they are treated differently here.

Constructors

Str Text 
Num Number 

data Number #

A numeric type with an explicit separation between integers and floating-point values.

Constructors

Int Int 
Dbl Double 

class ToGraphID a where #

A convenience class to make it easier to convert data types to GraphID values, e.g. for cluster identifiers.

In most cases, conversion would be via the Text or String instances (e.g. using show).

Methods

toGraphID :: a -> GraphID #

Instances
ToGraphID Char # 
Instance details

Defined in Data.GraphViz.Types

Methods

toGraphID :: Char -> GraphID #

ToGraphID Double # 
Instance details

Defined in Data.GraphViz.Types

Methods

toGraphID :: Double -> GraphID #

ToGraphID Int # 
Instance details

Defined in Data.GraphViz.Types

Methods

toGraphID :: Int -> GraphID #

ToGraphID Integer #

This instance loses precision by going via Number.

Instance details

Defined in Data.GraphViz.Types

Methods

toGraphID :: Integer -> GraphID #

ToGraphID String # 
Instance details

Defined in Data.GraphViz.Types

Methods

toGraphID :: String -> GraphID #

ToGraphID Text # 
Instance details

Defined in Data.GraphViz.Types

Methods

toGraphID :: Text -> GraphID #

textGraphID :: Text -> GraphID #

An alias for toGraphID for use with the OverloadedStrings extension.

data GlobalAttributes #

Represents a list of top-level list of Attributes for the entire graph/sub-graph. Note that GraphAttrs also applies to DotSubGraphs.

Note that Dot allows a single Attribute to be listed on a line; if this is the case then when parsing, the type of Attribute it is determined and that type of GlobalAttribute is created.

Constructors

GraphAttrs 

Fields

NodeAttrs 

Fields

EdgeAttrs 

Fields

Instances
Eq GlobalAttributes # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

Ord GlobalAttributes # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

Read GlobalAttributes # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

Show GlobalAttributes # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

ParseDot GlobalAttributes # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

PrintDot GlobalAttributes # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

data DotNode n #

A node in DotGraph.

Constructors

DotNode 
Instances
Functor DotNode # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

Methods

fmap :: (a -> b) -> DotNode a -> DotNode b #

(<$) :: a -> DotNode b -> DotNode a #

Eq n => Eq (DotNode n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

Methods

(==) :: DotNode n -> DotNode n -> Bool #

(/=) :: DotNode n -> DotNode n -> Bool #

Ord n => Ord (DotNode n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

Methods

compare :: DotNode n -> DotNode n -> Ordering #

(<) :: DotNode n -> DotNode n -> Bool #

(<=) :: DotNode n -> DotNode n -> Bool #

(>) :: DotNode n -> DotNode n -> Bool #

(>=) :: DotNode n -> DotNode n -> Bool #

max :: DotNode n -> DotNode n -> DotNode n #

min :: DotNode n -> DotNode n -> DotNode n #

Read n => Read (DotNode n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

Show n => Show (DotNode n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

Methods

showsPrec :: Int -> DotNode n -> ShowS #

show :: DotNode n -> String #

showList :: [DotNode n] -> ShowS #

ParseDot n => ParseDot (DotNode n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

PrintDot n => PrintDot (DotNode n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

data DotEdge n #

An edge in DotGraph.

Constructors

DotEdge 

Fields

Instances
Functor DotEdge # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

Methods

fmap :: (a -> b) -> DotEdge a -> DotEdge b #

(<$) :: a -> DotEdge b -> DotEdge a #

Eq n => Eq (DotEdge n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

Methods

(==) :: DotEdge n -> DotEdge n -> Bool #

(/=) :: DotEdge n -> DotEdge n -> Bool #

Ord n => Ord (DotEdge n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

Methods

compare :: DotEdge n -> DotEdge n -> Ordering #

(<) :: DotEdge n -> DotEdge n -> Bool #

(<=) :: DotEdge n -> DotEdge n -> Bool #

(>) :: DotEdge n -> DotEdge n -> Bool #

(>=) :: DotEdge n -> DotEdge n -> Bool #

max :: DotEdge n -> DotEdge n -> DotEdge n #

min :: DotEdge n -> DotEdge n -> DotEdge n #

Read n => Read (DotEdge n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

Show n => Show (DotEdge n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

Methods

showsPrec :: Int -> DotEdge n -> ShowS #

show :: DotEdge n -> String #

showList :: [DotEdge n] -> ShowS #

ParseDot n => ParseDot (DotEdge n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

PrintDot n => PrintDot (DotEdge n) # 
Instance details

Defined in Data.GraphViz.Types.Internal.Common

Helper types for looking up information within a DotRepr.

type ClusterLookup = Map (Maybe GraphID) ([Path], GlobalAttributes) #

The available information for each cluster; the [Path] denotes all locations where that particular cluster is located (more than one location can indicate possible problems).

type NodeLookup n = Map n (Path, Attributes) #

The available information on each DotNode (both explicit and implicit).

type Path = Seq (Maybe GraphID) #

The path of clusters that must be traversed to reach this spot.

graphStructureInformationClean :: DotRepr dg n => dg n -> (GlobalAttributes, ClusterLookup) #

A variant of graphStructureInformation with default attributes removed and only attributes usable by graph/cluster kept (where applicable).

nodeInformationClean :: DotRepr dg n => Bool -> dg n -> NodeLookup n #

A variant of nodeInformation with default attributes removed and only attributes used by nodes kept.

edgeInformationClean :: DotRepr dg n => Bool -> dg n -> [DotEdge n] #

A variant of edgeInformation with default attributes removed and only attributes used by edges kept.

Obtaining the DotNodes and DotEdges.

graphNodes :: DotRepr dg n => dg n -> [DotNode n] #

Returns all resultant DotNodes in the DotRepr (not including NodeAttrs).

graphEdges :: DotRepr dg n => dg n -> [DotEdge n] #

Returns all resultant DotEdges in the DotRepr (not including EdgeAttrs).

Printing and parsing a DotRepr.

printDotGraph :: PrintDotRepr dg n => dg n -> Text #

The actual Dot code for an instance of DotRepr. Note that it is expected that parseDotGraph . printDotGraph == id (this might not be true the other way around due to un-parseable components).

parseDotGraph :: ParseDotRepr dg n => Text -> dg n #

Parse a limited subset of the Dot language to form an instance of DotRepr. Each instance may have its own limitations on what may or may not be parseable Dot code.

Also removes any comments, etc. before parsing.

parseDotGraphLiberally :: ParseDotRepr dg n => Text -> dg n #

As with parseDotGraph, but if an Attribute cannot be parsed strictly according to the known rules, let it fall back to being parsed as an UnknownAttribute. This is especially useful for when using a version of Graphviz that is either newer (especially for the XDot attributes) or older (when some attributes have changed) but you'd still prefer it to parse rather than throwing an error.

Limitations and documentation

Printing of Dot code is done as strictly as possible, whilst parsing is as permissive as possible. For example, if the types allow it then "2" will be parsed as an Number value. Note that quoting and escaping of textual values is done automagically.

A summary of known limitations/differences:

  • When creating GraphID values for graphs and sub-graphs, you should ensure that none of them have the same printed value as one of the node identifiers values to avoid any possible problems.
  • If you want any GlobalAttributes in a sub-graph and want them to only apply to that sub-graph, then you must ensure it does indeed have a valid GraphID.
  • All sub-graphs which represent clusters should have unique identifiers (well, only if you want them to be generated sensibly).
  • If eventually outputting to a format such as SVG, then you should make sure to specify an identifier for the overall graph, as that is used as the title of the resulting image.
  • Whilst the graphs, etc. are polymorphic in their node type, you should ensure that you use a relatively simple node type (that is, it only covers a single line, etc.).
  • Also, whilst Graphviz allows you to mix the types used for nodes, this library requires/assumes that they are all the same type (but you can use a sum-type).
  • DotEdge defines an edge (a, b) (with an edge going from a to b); in Dot parlance the edge has a head at a and a tail at b. Care must be taken when using the related Head* and Tail* Attributes. See the differences section in Data.GraphViz.Attributes for more information.
  • It is common to see multiple edges defined on the one line in Dot (e.g. n1 -> n2 -> n3 means to create a directed edge from n1 to n2 and from n2 to n3). These types of edge definitions are parseable; however, they are converted to singleton edges.
  • It is not yet possible to create or parse edges with subgraphs/clusters as one of the end points.
  • The parser will strip out comments and pre-processor lines, join together multiline statements and concatenate split strings together. However, pre-processing within HTML-like labels is currently not supported.
  • Graphviz allows a node to be "defined" twice (e.g. the actual node definition, and then in a subgraph with extra global attributes applied to it). This actually represents the same node, but when parsing they will be considered as separate DotNodes (such that graphNodes will return both "definitions"). canonicalise from Data.GraphViz.Algorithms can be used to fix this.

See Data.GraphViz.Attributes.Complete for more limitations.