egison-3.0.0: hs-src/Language/Egison.hs
module Language.Egison
( module Language.Egison.Types
, module Language.Egison.Parser
, module Language.Egison.Primitives
, version
, loadLibraries
, loadPrimitives
, runEgisonTopExpr
, evalEgisonTopExpr
) where
import Control.Applicative ((<$>), (<*>))
import Control.Monad.Error
import Data.Version
import Data.ByteString.Lazy (ByteString)
import Data.ByteString.Lazy.Char8 ()
import qualified Data.ByteString.Lazy.Char8 as B
import Text.Parsec
import Text.Parsec.ByteString.Lazy
import qualified Paths_egison as P
import Language.Egison.Types
import Language.Egison.Core
import Language.Egison.Parser
import Language.Egison.Primitives
version :: Version
version = P.version
loadLibraries :: Env -> IO Env
loadLibraries env = do
result <- runEgisonM $ foldM evalTopExpr env (map Load libraries)
case result of
Left err -> do
print . show $ err
return env
Right env' ->
return env'
where
libraries :: [String]
libraries = [ "lib/core/base.egi"
, "lib/core/collection.egi"
, "lib/core/number.egi"
, "lib/core/pattern.egi" ]
loadPrimitives :: Env -> IO Env
loadPrimitives env = (++) <$> return env <*> primitiveEnv
runEgisonTopExpr :: Env -> String -> IO (Either EgisonError Env)
runEgisonTopExpr env input = runEgisonM $ do
expr <- liftError $ readTopExpr input
evalTopExpr env expr
evalEgisonTopExpr :: Env -> EgisonTopExpr -> IO (Either EgisonError Env)
evalEgisonTopExpr env expr = runEgisonM $ evalTopExpr env expr