module Language.Noodle.Lib.Math(env,decls) where

import Language.Noodle.Evaluation

env   = extenv decls
decls = [("+",extop plus)
        ,("-",extop minus)
        ,("*",extop times)
        ,("/",extop divide)]

plus :: Val -> Val -> IO Val
plus (Number a) (Number b) = return $ Number (a+b)
plus _ _ = return $ srtError "Invalid operand: +"

minus (Number a) (Number b) = return $ Number (a-b)
minus _ _ = return $ srtError "invalid operand: -"

times (Number a) (Number b) = return $ Number (a*b)
times _ _ = return $ srtError "invalid operand: *"

divide (Number _) (Number 0) = return $ srtError "divide by zero"
divide (Number a) (Number b) = return $ Number (a/b)
divide _ _ = return $ srtError "invalid operand: /"