module Language.Noodle.Lib.Basic (env,decls) where
import qualified Language.Noodle.Lib.String as StringLib
import qualified Language.Noodle.Lib.Boolean as BoolLib
import qualified Language.Noodle.Lib.Math as MathLib
import qualified Language.Noodle.Lib.IO as IOLib
import qualified Language.Noodle.Lib.Prod as ProdLib
import qualified Language.Noodle.Lib.Function as FunctLib
import Language.Noodle.Evaluation
import Data.List
env :: Env
env = extenv decls
decls :: [(String,Val)]
decls = MathLib.decls ++
IOLib.decls ++
BoolLib.decls ++
StringLib.decls ++
ProdLib.decls ++
FunctLib.decls ++
[ ("math", extmod MathLib.env)
, ("io" , extmod IOLib.env)
, ("bool", extmod BoolLib.env)
, ("string", extmod StringLib.env)
, ("product", extmod ProdLib.env)
, ("function", extmod FunctLib.env)
, (":", extop (\e1 e2 -> return e2))
, ("==", extop equal)
, ("error", extfun (\v -> return $ rtError v))
, ("nil", Thunk $ return Nil) ]
equal :: Val -> Val -> IO Val
equal v v2 = if v == v2
then return $ Symbol "True"
else return $ Nil