packages feed

calculator-0.2.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))
import           Calculator.Prim.Statement (Statement (..))

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

evalStat :: Bindings -> Statement -> Either Expr Bindings
evalStat b stat = case stat of
                   Expression e -> Left $ evalExpr b e
                   Command c    -> case evalCmd b c of
                                     Left s   -> Left . Message $ s
                                     Right b' -> Right b'

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