{- | Type system for transducers -} module FST.TransducerTypes ( -- * Types StateTy, FinalStates, FirstState, LastState, Sigma, Relation, Upper, Lower, Symbol (..), TTransitions, TTransitionTable, InitialStates, TransducerFunctions (..), ) where import FST.AutomatonTypes ( StateTy, FinalStates, Sigma, FirstState, LastState, InitialStates ) -- | A relation between upper/lower languages type Relation a = (Upper a, Lower a) -- | Upper language type Upper a = Symbol a -- | Lower language type Lower a = Symbol a -- | A symbol data Symbol a = S a | Eps deriving (Show, Read, Eq) -- | Transducer transitions type TTransitions a = [(Relation a, StateTy)] -- | Transducer transition table type TTransitionTable a = [(StateTy, [(Relation a, StateTy)])] -- | Class of TransducerFunctions class TransducerFunctions f where states :: f a -> [StateTy] isFinal :: f a -> StateTy -> Bool initials :: f a -> InitialStates finals :: f a -> FinalStates transitionTable :: f a -> TTransitionTable a transitionList :: f a -> StateTy -> TTransitions a transitionsU :: Eq a => f a -> (StateTy, Symbol a) -> [(Symbol a, StateTy)] transitionsD :: Eq a => f a -> (StateTy, Symbol a) -> [(Symbol a, StateTy)] firstState :: f a -> StateTy lastState :: f a -> StateTy alphabet :: f a -> Sigma a