egison-5.0.0: hs-src/Language/Egison.hs
{- |
Module : Language.Egison
Licence : MIT
This is the top module of Egison.
-}
module Language.Egison
( module Language.Egison.AST
, module Language.Egison.Data
, module Language.Egison.Eval
, module Language.Egison.EvalState
, module Language.Egison.Parser
, module Language.Egison.Primitives
-- * Modules needed to execute Egison
, module Language.Egison.CmdOptions
, module Language.Egison.RState
-- * Environment
, initialEnv
, coreLibraries
-- * Information
, version
) where
import Control.Monad.Reader (asks, local)
import Control.Monad.State
import Data.Version
import qualified Paths_egison as P
import Language.Egison.AST
import Language.Egison.CmdOptions
import Language.Egison.Data
import Language.Egison.Eval
import Language.Egison.EvalState
import Language.Egison.Parser
import Language.Egison.Primitives
import Language.Egison.RState
-- |Version number
version :: Version
version = P.version
-- |Create initial environment with only primitive functions
-- Core libraries will be loaded separately to maintain consistent Env chain
-- Returns EvalM Env to preserve EvalState (type environment, class environment)
initialEnv :: EvalM Env
initialEnv = do
isNoIO <- lift $ lift $ asks optNoIO
env <- liftIO $ if isNoIO then primitiveEnvNoIO else primitiveEnv
return env
coreLibraries :: [String]
coreLibraries =
-- Libs that defines user-defined infixes comes first
[
"lib/core/base.egi" -- Defines (&&) (||)
, "lib/core/order.egi"
, "lib/core/collection.egi" -- Defines (++) for patterns
, "lib/core/maybe.egi"
, "lib/core/number.egi"
, "lib/core/random.egi"
, "lib/core/assoc.egi"
, "lib/core/string.egi"
, "lib/core/io.egi"
, "lib/math/expression.egi" -- Defines (+) (*) (/) (^) for patterns
, "lib/math/common/arithmetic.egi" -- Defines (+) (-) (*) (/) (+') (-') (*') (/')
, "lib/math/algebra/group.egi"
, "lib/math/common/constants.egi"
, "lib/math/common/functions.egi"
, "lib/math/algebra/root.egi"
, "lib/math/algebra/tensor.egi" -- Defines (.) (.')
, "lib/math/algebra/vector.egi"
, "lib/math/algebra/equations.egi"
, "lib/math/algebra/matrix.egi"
, "lib/math/analysis/derivative.egi"
, "lib/math/geometry/differential-form.egi"
-- , "lib/math/algebra/inverse.egi"
-- , "lib/math/analysis/integral.egi"
]