module StackMachine where import System.IO type Transition state input output = (state, input) -> (state, output) process :: Transition state input output -> state -> [input] -> [output] runprocess :: Transition state String String -> state -> IO () runprocess tr s = do hSetBuffering stdout LineBuffering interact (unlines . process tr s . lines) countEcho :: Transition Integer String String trAdd :: Transition Integer String String type Mealy state input output = [((state,input),(state,output))] trMealy :: (Eq state) => Mealy state String String -> Transition state String String type FSM state = (state, [state], [((state,String),state)]) trDFSM :: (Eq state, Show state) => FSM state -> Transition state String String polish :: Transition [Integer] String String