Safe Haskell | None |
---|

Generating, interpreting, and drawing graphs of FSMs.

Includes:

- Interface to fgl graph library for graph input/output (http://hackage.haskell.org/package/fgl).
- Interface to graphviz library for dot output (http://hackage.haskell.org/package/graphviz).
- Home-grown GML (Graph Modelling Language) output.

- data SelfLoops
- fsmToFGL :: FSM sy -> SelfLoops -> Gr () sy
- fglDot :: (Ord b, Labellable b, Graph gr) => gr a b -> DotGraph Int
- strongCCs :: Eq sy => FSM sy -> [[State]]
- weakCCs :: Eq sy => FSM sy -> [[State]]
- fsmToDot :: (Ord sy, Labellable sy) => FSM sy -> DotGraph Int
- fglToFsm :: (Graph gr, Ord sy, Show sy) => gr a sy -> ReadFsmMonad (FSM sy, [LNode a])

# FGL graph operations.

When converting an `FSM`

into a graph, do we keep
all self-loops, or only those which are sources of nondeterminism?

# Dot and GML format output.

fsmToDot :: (Ord sy, Labellable sy) => FSM sy -> DotGraph IntSource

Turn an FSM into a `DotGraph`

, trimming any
self-loops which aren't sources of nondeterminism.

# Input.

fglToFsm :: (Graph gr, Ord sy, Show sy) => gr a sy -> ReadFsmMonad (FSM sy, [LNode a])Source

Turn an FGL graph (interpreted as being a directed graph) into an FSM. Self-loops are inserted as required. Also returns a list of the graph's labelled nodes, since the labels are discarded by the FSM construction. FSM states are numbered [0..] and thus may be used as an index into that list of labelled nodes, in order to relate FSM states back to the original graph nodes and their labels.