graphviz-2999.10.0.1: Graphviz bindings for Haskell.



This module defines simple helper functions for use with Text.PrettyPrint. It also re-exports all the pretty-printing combinators from that module.

Note that the PrintDot instances for Bool, etc. match those specified for use with Graphviz.

You should only be using this module if you are writing custom node types for use with Data.GraphViz.Types. For actual printing of code, use Data.GraphViz.Types.printDotGraph (which produces a String value).

The Dot language specification specifies that any identifier is in one of four forms:

  • Any string of alphabetic ([a-zA-Z200-377]) characters, underscores ('_') or digits ([0-9]), not beginning with a digit;
  • a number [-]?(.[0-9]+ | [0-9]+(.[0-9]*)? );
  • any double-quoted string ("...") possibly containing escaped quotes (\");
  • an HTML string (...).

(Note that the first restriction is referring to a byte-by-byte comparison using octal values; when using UTF-8 this corresponds to all characters c where ord c >= 128.)

Due to these restrictions, you should only use text when you are sure that the String in question is static and quotes are definitely needed/unneeded; it is better to use the String instance for PrintDot. For more information, see the specification page:



type DotCode = DocSource

A type alias to indicate what is being produced.

renderDot :: DotCode -> StringSource

Correctly render Graphviz output.

class PrintDot a whereSource

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


unqtDot :: a -> DotCodeSource

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

toDot :: a -> DotCodeSource

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] -> DotCodeSource

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] -> DotCodeSource

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).


PrintDot Bool 
PrintDot Char 
PrintDot Double 
PrintDot Int 
PrintDot Word8 
PrintDot Word16 
PrintDot X11Color 
PrintDot Color 
PrintDot BrewerName 
PrintDot ColorScheme 
PrintDot CompassPoint 
PrintDot PortPos 
PrintDot PortName 
PrintDot HtmlScale 
PrintDot HtmlVAlign 
PrintDot HtmlAlign 
PrintDot HtmlAttribute 
PrintDot HtmlImg 
PrintDot HtmlCell 
PrintDot HtmlRow 
PrintDot HtmlTable 
PrintDot HtmlTextItem 
PrintDot HtmlLabel 
PrintDot Ratios 
PrintDot Justification 
PrintDot ScaleType 
PrintDot VerticalPlacement 
PrintDot FocusType 
PrintDot ViewPort 
PrintDot StyleName 
PrintDot StyleItem 
PrintDot STStyle 
PrintDot StartType 
PrintDot SmoothType 
PrintDot Shape 
PrintDot RankDir 
PrintDot RankType 
PrintDot Root 
PrintDot QuadType 
PrintDot Spline 
PrintDot PageDir 
PrintDot EdgeType 
PrintDot Pos 
PrintDot PackMode 
PrintDot Pack 
PrintDot OutputMode 
PrintDot LayerList 
PrintDot LayerID 
PrintDot LayerRange 
PrintDot Overlap 
PrintDot Point 
PrintDot RecordField 
PrintDot Label 
PrintDot Model 
PrintDot ModeType 
PrintDot DPoint 
PrintDot DEConstraints 
PrintDot DirType 
PrintDot ClusterMode 
PrintDot Rect 
PrintDot AspectType 
PrintDot ArrowSide 
PrintDot ArrowFill 
PrintDot ArrowModifier 
PrintDot ArrowShape 
PrintDot ArrowType 
PrintDot Attribute 
PrintDot GlobalAttributes 
PrintDot GraphID 
PrintDot a => PrintDot [a] 
PrintDot a => PrintDot (DotEdge a) 
PrintDot a => PrintDot (DotNode a) 
PrintDot a => PrintDot (DotSubGraph a) 
PrintDot a => PrintDot (DotStatements a) 
PrintDot a => PrintDot (DotGraph a) 
PrintDot a => PrintDot (GDotSubGraph a) 
PrintDot a => PrintDot (GDotStatement a) 
PrintDot a => PrintDot (GDotGraph a) 

printIt :: PrintDot a => a -> StringSource

Convert to DotCode; note that this has no indentation, as we can only have one of indentation and (possibly) infinite line lengths.

unqtEscaped :: [Char] -> String -> DotCodeSource

Escape the specified chars as well as ".

printEscaped :: [Char] -> String -> DotCodeSource

Escape the specified chars as well as " and then wrap the result in quotes.

commaDel :: (PrintDot a, PrintDot b) => a -> b -> DotCodeSource