packages feed

Craft3e-0.1.1.0: Calculator/CalcToplevel.hs

-----------------------------------------------------------------------
--
--  Haskell: The Craft of Functional Programming
--  Simon Thompson
--  (c) Addison-Wesley, 1996-2011.
--
--  CalcToplevel.hs
--
--  Top-level interaction loop for a calculator
--
-----------------------------------------------------------------------

module CalcToplevel where

import System.IO 

import CalcTypes
import CalcStore
import CalcParseLib
import CalcParse
import CalcEval


calcStep :: Store -> IO Store

calcStep st
  = do line <- getLine
       let comm = calcLine line
       let (val , newSt) = command comm st
       print val
       return newSt


calcSteps :: Store -> IO ()

calcSteps st =
    do
      eof <- isEOF
      if eof
         then return ()
         else do newSt <- calcStep st
                 calcSteps newSt


mainCalc :: IO ()
mainCalc = 
    do
      hSetBuffering stdin LineBuffering
      calcSteps initial
      hSetBuffering stdin NoBuffering