Copyright | (c) Ivan Lazar Miljenovic |
---|---|
License | 3-Clause BSD-style |
Maintainer | Ivan.Miljenovic@gmail.com |
Safe Haskell | None |
Language | Haskell2010 |
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
- 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
- subgraph :: GraphID -> DotM n a -> Dot n
- anonSubgraph :: DotM n a -> Dot n
- cluster :: GraphID -> DotM n a -> Dot n
- node :: n -> Attributes -> Dot n
- node' :: n -> Dot n
- edge :: n -> n -> Attributes -> Dot n
- (-->) :: n -> n -> Dot n
- (<->) :: n -> n -> Dot n
Documentation
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.
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.
Creating a generalised DotGraph.
digraph :: GraphID -> DotM n a -> DotGraph n Source #
Create a directed dot graph with the specified graph ID.
graph :: GraphID -> DotM n a -> DotGraph n Source #
Create a undirected dot graph with the specified graph ID.
Adding global attributes.
graphAttrs :: Attributes -> Dot n Source #
Add graph/sub-graph/cluster attributes.
nodeAttrs :: Attributes -> Dot n Source #
Add global node attributes.
edgeAttrs :: Attributes -> Dot n Source #
Add global edge attributes
Adding items to the graph.
Subgraphs and clusters
anonSubgraph :: DotM n a -> Dot n Source #
Add an anonymous subgraph to the graph.
It is highly recommended you use subgraph
instead.
Nodes
node :: n -> Attributes -> Dot n Source #
Add a node to the graph.
Edges
If you wish to use something analogous to Dot's ability to write multiple edges with in-line subgraphs such as:
{a b c} -> {d e f}
Then you can use -->
and <->
in combination with monadic
traversal functions such as traverse_
, for_
, mapM_
, forM_
and zipWithM_
; for example:
("a" -->) `traverse_` ["d", "e", "f"] ["a", "b", "c"] `for_` (--> "d") zipWithM_ (-->) ["a", "b", "c"] ["d", "e", "f"]
edge :: n -> n -> Attributes -> Dot n Source #
Add an edge to the graph.