fsmActions-0.4.4: Finite state machines and FSM actions

Safe HaskellNone




Generating, interpreting, and drawing graphs of FSMs.



FGL graph operations.

data SelfLoops Source

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



Keep them all


Trim any which aren't nondeterminism sources.

fsmToFGL :: FSM sy -> SelfLoops -> Gr () sySource

Turn an FSM into an fgl graph with labelled edges.

fglDot :: (Ord b, Labellable b, Graph gr) => gr a b -> DotGraph IntSource

strongCCs :: Eq sy => FSM sy -> [[State]]Source

Compute an FSM's strongly-connected components.

weakCCs :: Eq sy => FSM sy -> [[State]]Source

Compute an FSM's weakly-connected components.

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.


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.