dotgen-0.4.2: A simple interface for building .dot graph files.

CopyrightAndy Gill
MaintainerAndy Gill <>
Safe HaskellSafe-Inferred




This module provides a simple interface for building .dot graph files, for input into the dot and graphviz tools. It includes a monadic interface for building graphs.




node :: [(String, String)] -> Dot NodeId Source

node takes a list of attributes, generates a new node, and gives a NodeId.

data NodeId Source


userNodeId :: Int -> NodeId Source

userNodeId allows a user to use their own (Int-based) node id's, without needing to remap them.

userNode :: NodeId -> [(String, String)] -> Dot () Source

userNode takes a NodeId, and adds some attributes to that node.


edge :: NodeId -> NodeId -> [(String, String)] -> Dot () Source

edge generates an edge between two NodeIds, with attributes.

edge' :: NodeId -> Maybe String -> NodeId -> Maybe String -> [(String, String)] -> Dot () Source

edge generates an edge between two NodeIds, with optional node sub-labels, and attributes.

(.->.) :: NodeId -> NodeId -> Dot () Source

.->. generates an edge between two NodeIds.

Showing a graph

Other combinators

scope :: Dot a -> Dot a Source

scope groups a subgraph together; in dot these are the subgraphs inside "{" and "}".

attribute :: (String, String) -> Dot () Source

attribute gives a attribute to the current scope.

share :: [(String, String)] -> [NodeId] -> Dot () Source

share is when a set of nodes share specific attributes. Usually used for layout tweaking.

same :: [NodeId] -> Dot () Source

same provides a combinator for a common pattern; a set of NodeIds with the same rank.

cluster :: Dot a -> Dot (NodeId, a) Source

cluster builds an explicit, internally named subgraph (called cluster).

Simple netlist generation

netlistGraph Source


:: Ord a 
=> (b -> [(String, String)])

Attributes for each node

-> (b -> [a])

Out edges leaving each node

-> [(a, b)]

The netlist

-> Dot () 

netlistGraph generates a simple graph from a netlist.