calculator-0.1.5.0: src/Main.hs
module Main where
--------------------------------------------------------------------------------
import Paths_calculator (version)
--------------------------------------------------------------------------------
import Calculator.Evaluator.Base (evaluate)
import Calculator.Prim.Expr (Bindings, defBinds)
--------------------------------------------------------------------------------
import Data.Version (showVersion)
import System.Console.Haskeline
--------------------------------------------------------------------------------
type Repl a = InputT IO a
--------------------------------------------------------------------------------
repl :: Bindings -> Repl ()
repl b = do
input <- getInputLine "calc> "
case input of
Nothing -> return ()
Just inp -> case evaluate b inp of
Left s -> outputStrLn s >> repl b
Right b' -> repl b'
--------------------------------------------------------------------------------
main :: IO ()
main = do
putStrLn $ "calculator, version "
++ showVersion version
++ ". Use :? for help"
runInputT defaultSettings (repl defBinds)
--------------------------------------------------------------------------------