Data.GraphViz.Types.Monadic

graphviz-2999.18.1.2: Bindings to Graphviz for graph visualisation.

Copyright | (c) Ivan Lazar Miljenovic
License | 3-Clause BSD-style
Maintainer | Ivan.Miljenovic@gmail.com
Safe Haskell | None
Language | Haskell2010

Data.GraphViz.Types.Monadic

Contents

- Creating a generalised DotGraph.
- Adding global attributes.
- Adding items to the graph.
  - Clusters
  - Nodes
  - Edges

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

- type Dot n = DotM n ()
- data DotM n a
- data GraphID
  - = Str Text
  - | Num Number
- digraph :: GraphID -> DotM n a -> DotGraph n
- digraph' :: DotM n a -> DotGraph n
- graph :: GraphID -> DotM n a -> DotGraph n
- graph' :: DotM n a -> DotGraph n
- graphAttrs :: Attributes -> Dot n
- nodeAttrs :: Attributes -> Dot n
- edgeAttrs :: Attributes -> Dot n
- cluster :: GraphID -> DotM n a -> Dot n
- node :: n -> Attributes -> Dot n
- node' :: n -> Dot n
- class NodeList n nl where
- edge :: (NodeList n f, NodeList n t) => f -> t -> Attributes -> Dot n
- (-->) :: (NodeList n f, NodeList n t) => f -> t -> Dot n
- (<->) :: (NodeList n f, NodeList n t) => f -> t -> Dot n

# Documentation

type Dot n = DotM n () #

The monadic representation of a Dot graph.

data DotM n a #

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) # |
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) # |
Methods fmap :: (a -> b) -> DotM n a -> DotM n b # (<$) :: a -> DotM n b -> DotM n a #
Applicative (DotM n) # |
Methods pure :: a -> DotM n a # (<*>) :: DotM n (a -> b) -> DotM n a -> DotM n b # liftA2 :: (a -> b -> c) -> DotM n a -> DotM n b -> DotM n c # (*>) :: DotM n a -> DotM n b -> DotM n b # (<*) :: DotM n a -> DotM n b -> DotM n a #

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 |

Instances

Eq GraphID # |
Methods (==) :: GraphID -> GraphID -> Bool # (/=) :: GraphID -> GraphID -> Bool #
Ord GraphID # |
Methods compare :: GraphID -> GraphID -> Ordering # (<) :: GraphID -> GraphID -> Bool # (<=) :: GraphID -> GraphID -> Bool # (>) :: GraphID -> GraphID -> Bool # (>=) :: GraphID -> GraphID -> Bool # max :: GraphID -> GraphID -> GraphID # min :: GraphID -> GraphID -> GraphID #
Read GraphID # |
Methods readsPrec :: Int -> ReadS GraphID # readList :: ReadS [GraphID] # readPrec :: ReadPrec GraphID # readListPrec :: ReadPrec [GraphID] #
Show GraphID # |
Methods showsPrec :: Int -> GraphID -> ShowS # show :: GraphID -> String # showList :: [GraphID] -> ShowS #
ParseDot GraphID # |
Methods parseUnqt :: Parse GraphID # parse :: Parse GraphID # parseUnqtList :: Parse [GraphID] # parseList :: Parse [GraphID] #
PrintDot GraphID # |
Methods unqtDot :: GraphID -> DotCode # toDot :: GraphID -> DotCode # unqtListToDot :: [GraphID] -> DotCode # listToDot :: [GraphID] -> DotCode #

# Creating a generalised DotGraph.

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

Create a directed dot graph with the specified graph ID.

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

Create a directed dot graph with no graph ID.

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

Create a undirected dot graph with the specified graph ID.

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

Create a undirected dot graph with no graph ID.

# Adding global attributes.

graphAttrs :: Attributes -> Dot n #

Add graphsub-graphcluster attributes.

nodeAttrs :: Attributes -> Dot n #

Add global node attributes.

edgeAttrs :: Attributes -> Dot n #

Add global edge attributes

# Adding items to the graph.

## Clusters

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

Add a named cluster to the graph.

## Nodes

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

Add a node to the graph.

node' :: n -> Dot n #

Add a node with no attributes to the graph.

## Edges

class NodeList n nl where #

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

Minimal complete definition

toNodeList

Methods

toNodeList :: nl -> [n] #

Instances

NodeList n n # |
Methods toNodeList :: n -> [n] #
NodeList n [n] # |
Methods toNodeList :: [n] -> [n] #

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

Add an edge to the graph.

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

Add an edge with no attributes.

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

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