graphviz-2999.18.1.2: 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.Monadic

Contents

Description

This module is based upon the dotgen library by Andy Gill: http://hackage.haskell.org/package/dotgen

It provides a monadic interface for constructing generalised Dot graphs. Note that this does not have an instance for DotRepr (e.g. what would be the point of the fromCanonical function, as you can't do anything with the result): it is purely for construction purposes. Use the generalised Dot graph instance for printing, etc.

Note that the generalised Dot graph types are not re-exported, in case it causes a clash with other modules you may choose to import.

The example graph in Data.GraphViz.Types can be written as:

digraph (Str "G") $ do

   cluster (Int 0) $ do
       graphAttrs [style filled, color LightGray]
       nodeAttrs [style filled, color White]
       "a0" --> "a1"
       "a1" --> "a2"
       "a2" --> "a3"
       graphAttrs [textLabel "process #1"]

   cluster (Int 1) $ do
       nodeAttrs [style filled]
       "b0" --> "b1"
       "b1" --> "b2"
       "b2" --> "b3"
       graphAttrs [textLabel "process #2", color Blue]

   "start" --> "a0"
   "start" --> "b0"
   "a1" --> "b3"
   "b2" --> "a3"
   "a3" --> "end"
   "b3" --> "end"

   node "start" [shape MDiamond]
   node "end" [shape MSquare]

Synopsis

Documentation

type Dot n = DotM n () Source #

The monadic representation of a Dot graph.

data DotM n a Source #

The actual monad; as with Dot but allows you to return a value within the do-block. The actual implementation is based upon the Writer monad.

Instances

Monad (DotM n) Source # 

Methods

(>>=) :: DotM n a -> (a -> DotM n b) -> DotM n b #

(>>) :: DotM n a -> DotM n b -> DotM n b #

return :: a -> DotM n a #

fail :: String -> DotM n a #

Functor (DotM n) Source # 

Methods

fmap :: (a -> b) -> DotM n a -> DotM n b #

(<$) :: a -> DotM n b -> DotM n a #

Applicative (DotM n) Source # 

Methods

pure :: a -> DotM n a #

(<*>) :: DotM n (a -> b) -> DotM n a -> DotM n b #

(*>) :: DotM n a -> DotM n b -> DotM n b #

(<*) :: DotM n a -> DotM n b -> DotM n a #

data GraphID Source #

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 

Creating a generalised DotGraph.

digraph :: GraphID -> DotM n a -> DotGraph n Source #

Create a directed dot graph with the specified graph ID.

digraph' :: DotM n a -> DotGraph n Source #

Create a directed dot graph with no graph ID.

graph :: GraphID -> DotM n a -> DotGraph n Source #

Create a undirected dot graph with the specified graph ID.

graph' :: DotM n a -> DotGraph n Source #

Create a undirected dot graph with no graph ID.

Adding global attributes.

graphAttrs :: Attributes -> Dot n Source #

Add graphsub-graphcluster attributes.

nodeAttrs :: Attributes -> Dot n Source #

Add global node attributes.

edgeAttrs :: Attributes -> Dot n Source #

Add global edge attributes

Adding items to the graph.

Clusters

cluster :: GraphID -> DotM n a -> Dot n Source #

Add a named cluster to the graph.

Nodes

node :: n -> Attributes -> Dot n Source #

Add a node to the graph.

node' :: n -> Dot n Source #

Add a node with no attributes to the graph.

Edges

class NodeList n nl where Source #

A list of nodes to serve as edge end-points.

Minimal complete definition

toNodeList

Methods

toNodeList :: nl -> [n] Source #

Instances

NodeList n n Source # 

Methods

toNodeList :: n -> [n] Source #

NodeList n [n] Source # 

Methods

toNodeList :: [n] -> [n] Source #

edge :: (NodeList n f, NodeList n t) => f -> t -> Attributes -> Dot n Source #

Add an edge to the graph.

(-->) :: (NodeList n f, NodeList n t) => f -> t -> Dot n infixr 9 Source #

Add an edge with no attributes.

(<->) :: (NodeList n f, NodeList n t) => f -> t -> Dot n infixr 9 Source #

An alias for --> to make edges look more undirected.