packages feed

calculator-0.1.5.4: src/Calculator/Evaluator/Func.hs

module Calculator.Evaluator.Func where

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

import Calculator.Prim.Base (Number)
import Calculator.Prim.Cmd (Cmd(Func))
import Calculator.Prim.Expr (addVar, Bindings, Expr(Constant))
import Calculator.Evaluator.Expr (evalExpr)

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

mkFun :: Bindings -> Cmd -> (Number -> Number)
mkFun b (Func _ x e) = \v -> case evalExpr (addVar (x, v) b) e of
                               Constant z -> z
                               _          -> error "Invalid Result"
mkFun _ _            = error "Making function from invalid cmd"

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