fsmActions-0.4.4: Finite state machines and FSM actions

Safe HaskellSafe-Inferred

Data.FsmActions.WellFormed

Description

Well-formedness checks for finite state machines.

Synopsis

Documentation

data WellFormed sy Source

An FSM is well-formed if all its actions are the same length, none of its actions contain destinations which are out of range, and it is not disjoint.

Constructors

BadLengths [(sy, Int)]

Lengths of Actions in the FSM don't all match. Carries a sorted list of (symbol, Action length) pairs, one for every symbol in the alphabet of the FSM.

BadActions [(sy, Action)]

Some Actions contain out-of-range (negative or too-high) destinations. Carries a sorted list of all such actions and their corresponding symbols.

Disconnected [[State]]

The FSM is disconnected, i.e. not even weakly-connected. Carries a list of its weakly-connected components (each is a list of States).

WellFormed

Well-formed.

Instances

Eq sy => Eq (WellFormed sy) 
Show sy => Show (WellFormed sy) 

isWellFormed :: Ord sy => FSM sy -> WellFormed sySource

Check if an FSM is well-formed or not.

polishFSM :: (Ord sy, Show sy) => FSM sy -> ReadFsmMonad (FSM sy)Source

Given an FSM, normalise it and check it's well-formed.

This should be called whenever an FSM is read/computed from an outside source. If parsing, the right time to call this is immediately after you've decided if the parse of the FSM was successful or not. (In other words, here are some static checks!)