> import STFM > data Com = Assign Var Exp > | Read Var > | Write Exp > | While Exp [Com] > type Var = String > data Exp = Ref Var > | Num Integer > | Bin BinOp Exp Exp > data BinOp = Plus > | Minus > | Times > | Div > interpret :: [Com] -> [Integer] -> [Integer] > interpret cs input = runSTFM (fmap snd $ evalComs cs input) > evalExp :: Exp -> STFM Integer > evalExp ... > evalCom :: Com -> [Integer] -> STFM ([Integer],[Integer]) > evalCom ... > evalComs :: [Com] -> [Integer] -> STFM ([Integer],[Integer]) > evalComs ...