packages feed

calculator-0.1.5.0: src/Calculator/Evaluator/Cmd.hs

module Calculator.Evaluator.Cmd (evalCmd) where

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

import Calculator.Prim.Expr (Bindings, defBinds, fromConst, addVar, addFun)
import Calculator.Prim.Cmd (Cmd(..))
import Calculator.Evaluator.Func (mkFun)
import Calculator.Evaluator.Expr (evalExpr)
import Calculator.Help (help)

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

evalCmd :: Bindings -> Cmd -> Either [String] Bindings
evalCmd _ (Help)         = Left help
evalCmd _ (Reset)        = Right defBinds
evalCmd b (Assign s e)   = Right $ addVar (s, fromConst $ evalExpr b e) b
evalCmd b f@(Func i _ _) = Right $ addFun (i, mkFun b f) b

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