calculator-0.2.0.0: src/Calculator/Evaluator/Func.hs
module Calculator.Evaluator.Func where
--------------------------------------------------------------------------------
import Calculator.Evaluator.Expr (evalExpr)
import Calculator.Prim.Bindings (Bindings, appendVars)
import Calculator.Prim.Cmd (Cmd (Func))
import Calculator.Prim.Expr (Expr (Constant, Message))
import Calculator.Prim.Function (Function, mkFuncEither)
--------------------------------------------------------------------------------
execFunc :: Bindings -> Cmd -> Function Double
execFunc b (Func _ args e) =
mkFuncEither (length args) $ \xs ->
case evalExpr (appendVars (zip args xs) b) e of
Constant z -> Right z
Message ms -> Left ms
_ -> error "Invalid Result"
execFunc _ _ = error "Making function from invalid cmd"
--------------------------------------------------------------------------------