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 --------------------------------------------------------------------------------