fst-0.10.0.0: FST/Info.hs
{- |
State data structure for the interactive shell
-}
module FST.Info where
import FST.TransducerInterface
-- | State in interactive shell
data Info = Info {
transducer :: (Transducer String, Bool),
expression :: (RReg String, Bool),
input :: ([String], Bool),
outputs :: ([String], Bool)
} deriving (Show)
-- | Empty information
emptyInfo :: Info
emptyInfo = Info {
transducer = (emptyTransducer, False),
expression = (empty, False),
input = ([], False),
outputs = ([], False)
}
-- | Is there a built transducer in the state?
transducerBuilt :: Info -> Bool
transducerBuilt = snd . transducer
-- | Is there a read expression in the state?
expressionRead :: Info -> Bool
expressionRead = snd . expression
-- | Is there an input in the state?
inputRead :: Info -> Bool
inputRead = snd . input
-- | Is there an output in the state?
outputsRead :: Info -> Bool
outputsRead = snd . outputs
-- | Set transducer in state
updateTransducer :: Transducer String -> Info -> Info
updateTransducer t info = info { transducer = (t, True) }
-- | Set expression in state
updateExpression :: RReg String -> Info -> Info
updateExpression r info = info { expression = (r, True) }
-- | Set input in state
updateInput :: [String] -> Info -> Info
updateInput inp info = info { input = (inp, True) }
-- | Set outputs in state
updateOutputs :: [String] -> Info -> Info
updateOutputs out info = info { outputs = (out, True) }
-- | Get transducer from state
getTransducer :: Info -> Transducer String
getTransducer = fst . transducer
-- | Get expression from state
getExpression :: Info -> RReg String
getExpression = fst . expression
-- | Get input from state
getInput :: Info -> [String]
getInput = fst . input
-- | Get outputs from state
getOutputs :: Info -> [String]
getOutputs = fst . outputs