packages feed

calculator-0.3.0.0: src/Calculator/Evaluator/Statement.hs

module Calculator.Evaluator.Statement (evalStat) where

--------------------------------------------------------------------------------

import           Calculator.Evaluator.Cmd  (evalCmd)
import           Calculator.Evaluator.Expr (evalExpr)
import           Calculator.Prim.Bindings  (Bindings)
import           Calculator.Prim.Expr      (Expr (Message, Constant))
import           Calculator.Prim.Result    (Result (..))
import           Calculator.Prim.Statement (Statement (..))

--------------------------------------------------------------------------------

evalStat :: Bindings -> Statement -> Result
evalStat b stat =
    case stat of
      Expression e -> case evalExpr b e of
                        Constant c -> Value c
                        Message  t -> Error . unlines $ t
                        _          -> Error "Internal error: evalStat"
      Command c    -> evalCmd b c

--------------------------------------------------------------------------------