\begin{code} {-| Description: Finite state transducers with epsilon-transitions -} module Control.FST ( FST(..) ) where import Data.Map.Strict (Map) import qualified Data.Map.Strict as Map import Data.Set (Set) import Data.Sequence (Seq) import Control.Lens.TH data FST state input output = FST { stInitial :: state , stTransition :: Map (state, Maybe input) (Set (state, Maybe output)) , stAccept :: Set state } \end{code}