Interact.lhs Top-level interaction loop for a calculator > module Interact where > import IO hiding ( bracket ) > import Types > import Store > import ParseLib > import ParseCalc > import Eval > import MonadIO > calcStep :: Store -> IO Store > calcStep st > = do line <- getLine > comm <- return (calcLine line) > (val , newSt) <- return (command comm st) > print val > return newSt > calcSteps :: Store -> IO () > calcSteps st > = while notEOF > (do newSt <- calcStep st > calcSteps newSt) > notEOF :: IO Bool > notEOF = do res <- isEOF > return (not res) > mainCalc :: IO () > mainCalc = calcSteps initial