-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | An Interpreter for the Programming Language Egison -- -- An interpreter for the programming language Egison. A feature of -- Egison is the strong pattern match facility. With Egison, you can -- represent pattern matching for unfree data intuitively, especially for -- collection data, such as lists, multisets, sets, and so on. This -- package include sample Egison program codes *-test.egi in -- sample/ directory. This package also include Emacs Lisp file -- egison-mode.el in elisp/ directory. @package egison @version 3.0.0 module Language.Egison.Types data EgisonTopExpr Define :: String -> EgisonExpr -> EgisonTopExpr Test :: EgisonExpr -> EgisonTopExpr Execute :: [String] -> EgisonTopExpr LoadFile :: String -> EgisonTopExpr Load :: String -> EgisonTopExpr data EgisonExpr CharExpr :: Char -> EgisonExpr StringExpr :: String -> EgisonExpr BoolExpr :: Bool -> EgisonExpr IntegerExpr :: Integer -> EgisonExpr FloatExpr :: Double -> EgisonExpr VarExpr :: String -> [EgisonExpr] -> EgisonExpr InductiveDataExpr :: String -> [EgisonExpr] -> EgisonExpr TupleExpr :: [EgisonExpr] -> EgisonExpr CollectionExpr :: [InnerExpr] -> EgisonExpr PatternExpr :: EgisonPattern -> EgisonExpr LambdaExpr :: [String] -> EgisonExpr -> EgisonExpr IfExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr -> EgisonExpr LetExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr LetRecExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr LoopExpr :: String -> String -> EgisonExpr -> EgisonExpr -> EgisonExpr -> EgisonExpr MatchExpr :: EgisonExpr -> EgisonExpr -> [MatchClause] -> EgisonExpr MatchAllExpr :: EgisonExpr -> EgisonExpr -> MatchClause -> EgisonExpr FunctionExpr :: EgisonExpr -> [MatchClause] -> EgisonExpr MatcherExpr :: MatcherInfo -> EgisonExpr DoExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr ApplyExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr AlgebraicDataMatcher :: [EgisonExpr] -> EgisonExpr SomethingExpr :: EgisonExpr UndefinedExpr :: EgisonExpr type BindingExpr = ([String], EgisonExpr) type MatchClause = (EgisonExpr, EgisonExpr) type MatcherInfo = [(PrimitivePatPattern, EgisonExpr, [(PrimitiveDataPattern, EgisonExpr)])] data EgisonPattern WildCard :: EgisonPattern PatVar :: String -> [EgisonExpr] -> EgisonPattern ValuePat :: EgisonExpr -> EgisonPattern PredPat :: EgisonExpr -> EgisonPattern CutPat :: EgisonExpr -> EgisonPattern NotPat :: EgisonExpr -> EgisonPattern AndPat :: [EgisonExpr] -> EgisonPattern OrPat :: [EgisonExpr] -> EgisonPattern InductivePattern :: String -> [EgisonExpr] -> EgisonPattern data PrimitivePatPattern PPWildCard :: PrimitivePatPattern PPPatVar :: PrimitivePatPattern PPValuePat :: String -> PrimitivePatPattern PPInductivePat :: String -> [PrimitivePatPattern] -> PrimitivePatPattern data PrimitiveDataPattern PDWildCard :: PrimitiveDataPattern PDPatVar :: String -> PrimitiveDataPattern PDInductivePat :: String -> [PrimitiveDataPattern] -> PrimitiveDataPattern PDEmptyPat :: PrimitiveDataPattern PDConsPat :: PrimitiveDataPattern -> PrimitiveDataPattern -> PrimitiveDataPattern PDSnocPat :: PrimitiveDataPattern -> PrimitiveDataPattern -> PrimitiveDataPattern PDConstantPat :: EgisonExpr -> PrimitiveDataPattern data InnerExpr ElementExpr :: EgisonExpr -> InnerExpr SubCollectionExpr :: EgisonExpr -> InnerExpr data EgisonValue World :: EgisonValue Char :: Char -> EgisonValue String :: String -> EgisonValue Bool :: Bool -> EgisonValue Integer :: Integer -> EgisonValue Float :: Double -> EgisonValue InductiveData :: String -> [EgisonValue] -> EgisonValue Tuple :: [EgisonValue] -> EgisonValue Collection :: [EgisonValue] -> EgisonValue Pattern :: EgisonPattern -> EgisonValue Matcher :: Matcher -> EgisonValue Func :: Env -> [String] -> EgisonExpr -> EgisonValue PrimitiveFunc :: PrimitiveFunc -> EgisonValue IOFunc :: IOFunc -> EgisonValue Port :: Handle -> EgisonValue Something :: EgisonValue EOF :: EgisonValue type Matcher = (Env, MatcherInfo) type PrimitiveFunc = [WHNFData] -> Either EgisonError EgisonValue type IOFunc = [WHNFData] -> EgisonM EgisonValue data Object Thunk :: (EgisonM WHNFData) -> Object WHNF :: WHNFData -> Object type ObjectRef = IORef Object data WHNFData Intermediate :: Intermediate -> WHNFData Value :: EgisonValue -> WHNFData data Intermediate IInductiveData :: String -> [ObjectRef] -> Intermediate ITuple :: [ObjectRef] -> Intermediate ICollection :: [Inner] -> Intermediate data Inner IElement :: ObjectRef -> Inner ISubCollection :: ObjectRef -> Inner fromCharValue :: WHNFData -> Either EgisonError Char fromStringValue :: WHNFData -> Either EgisonError String fromBoolValue :: WHNFData -> Either EgisonError Bool fromIntegerValue :: WHNFData -> Either EgisonError Integer fromFloatValue :: WHNFData -> Either EgisonError Double fromPortValue :: WHNFData -> Either EgisonError Handle fromPatternValue :: WHNFData -> Either EgisonError EgisonPattern fromMatcherValue :: WHNFData -> Either EgisonError Matcher fromPrimitiveValue :: WHNFData -> Either EgisonError EgisonValue type Var = (String, [Integer]) type Env = [HashMap Var ObjectRef] type Binding = (Var, ObjectRef) nullEnv :: Env extendEnv :: Env -> [Binding] -> Env refVar :: Env -> Var -> EgisonM ObjectRef data MatchingState MState :: Env -> [Binding] -> [MatchingTree] -> MatchingState data MatchingTree MAtom :: EgisonExpr -> ObjectRef -> WHNFData -> MatchingTree MNode :: [PatternBinding] -> MatchingState -> MatchingTree type PatternBinding = (Var, EgisonExpr) data EgisonError Parser :: ParseError -> EgisonError UnboundVariable :: Var -> EgisonError TypeMismatch :: String -> WHNFData -> EgisonError ArgumentsNum :: Int -> Int -> EgisonError NotImplemented :: String -> EgisonError Assertion :: String -> EgisonError Match :: String -> EgisonError Desugar :: String -> EgisonError Default :: String -> EgisonError liftError :: MonadError e m => Either e a -> m a newtype EgisonM a EgisonM :: ErrorT EgisonError IO a -> EgisonM a unEgisonM :: EgisonM a -> ErrorT EgisonError IO a runEgisonM :: EgisonM a -> IO (Either EgisonError a) type MatchM = MaybeT EgisonM matchFail :: MatchM a data MList m a MNil :: MList m a MCons :: a -> (m (MList m a)) -> MList m a fromList :: Monad m => [a] -> MList m a fromMList :: Monad m => MList m a -> m [a] msingleton :: Monad m => a -> MList m a mfoldr :: Monad m => (a -> m b -> m b) -> m b -> MList m a -> m b mappend :: Monad m => MList m a -> m (MList m a) -> m (MList m a) mconcat :: Monad m => MList m (MList m a) -> m (MList m a) mmap :: Monad m => (a -> m b) -> MList m a -> m (MList m b) mfor :: Monad m => MList m a -> (a -> m b) -> m (MList m b) instance Show PrimitivePatPattern instance Show InnerExpr instance Show EgisonExpr instance Show EgisonPattern instance Show PrimitiveDataPattern instance Show EgisonTopExpr instance Functor EgisonM instance Applicative EgisonM instance Monad EgisonM instance MonadIO EgisonM instance MonadError EgisonError EgisonM instance Error EgisonError instance Show EgisonError instance Show WHNFData instance Eq EgisonValue instance Show EgisonValue module Language.Egison.Desugar newtype DesugarM a DesugarM :: StateT Int (ErrorT EgisonError Identity) a -> DesugarM a unDesugarM :: DesugarM a -> StateT Int (ErrorT EgisonError Identity) a class (Applicative m, Monad m) => MonadFresh m fresh :: MonadFresh m => m String runDesugarM :: DesugarM a -> Either EgisonError a desugar :: EgisonExpr -> DesugarM EgisonExpr desugarBinding :: BindingExpr -> DesugarM BindingExpr desugarBindings :: [BindingExpr] -> DesugarM [BindingExpr] desugarMatchClause :: MatchClause -> DesugarM MatchClause desugarMatchClauses :: [MatchClause] -> DesugarM [MatchClause] instance Functor DesugarM instance Applicative DesugarM instance Monad DesugarM instance MonadState Int DesugarM instance MonadError EgisonError DesugarM instance MonadFresh DesugarM module Language.Egison.Parser readTopExprs :: String -> Either EgisonError [EgisonTopExpr] readTopExpr :: String -> Either EgisonError EgisonTopExpr readExprs :: String -> Either EgisonError [EgisonExpr] readExpr :: String -> Either EgisonError EgisonExpr module Language.Egison.Core evalTopExprs :: Env -> [EgisonTopExpr] -> EgisonM Env evalTopExpr :: Env -> EgisonTopExpr -> EgisonM Env loadFile :: FilePath -> EgisonM [EgisonTopExpr] loadLibraryFile :: FilePath -> EgisonM [EgisonTopExpr] evalExpr :: Env -> EgisonExpr -> EgisonM WHNFData evalExpr' :: Env -> EgisonExpr -> EgisonM EgisonValue evalRef :: ObjectRef -> EgisonM WHNFData evalRef' :: ObjectRef -> EgisonM EgisonValue evalDeep :: WHNFData -> EgisonM EgisonValue applyFunc :: WHNFData -> [ObjectRef] -> EgisonM WHNFData newThunk :: Env -> EgisonExpr -> EgisonM ObjectRef writeThunk :: ObjectRef -> WHNFData -> EgisonM () newEvaluatedThunk :: WHNFData -> EgisonM ObjectRef makeBindings :: [String] -> [ObjectRef] -> [Binding] recursiveBind :: Env -> [(String, EgisonExpr)] -> EgisonM Env fromTuple :: WHNFData -> EgisonM [ObjectRef] fromCollection :: WHNFData -> EgisonM (MList EgisonM ObjectRef) patternMatch :: Env -> EgisonExpr -> ObjectRef -> WHNFData -> EgisonM (MList EgisonM [Binding]) processMStates :: [MList EgisonM MatchingState] -> EgisonM (MList EgisonM [Binding]) processMState :: MatchingState -> EgisonM (MList EgisonM MatchingState) evalPattern :: Env -> EgisonExpr -> EgisonM EgisonExpr inductiveMatch :: Env -> EgisonExpr -> ObjectRef -> Matcher -> EgisonM ([EgisonExpr], MList EgisonM ObjectRef, [WHNFData]) primitivePatPatternMatch :: Env -> PrimitivePatPattern -> EgisonExpr -> MatchM ([EgisonExpr], [Binding]) primitiveDataPatternMatch :: PrimitiveDataPattern -> ObjectRef -> MatchM [Binding] expandCollection :: WHNFData -> EgisonM [Inner] isEmptyCollection :: ObjectRef -> EgisonM Bool unconsCollection :: ObjectRef -> MatchM (ObjectRef, ObjectRef) unsnocCollection :: ObjectRef -> MatchM (ObjectRef, ObjectRef) module Language.Egison.Primitives primitiveEnv :: IO Env module Language.Egison version :: Version loadLibraries :: Env -> IO Env loadPrimitives :: Env -> IO Env runEgisonTopExpr :: Env -> String -> IO (Either EgisonError Env) evalEgisonTopExpr :: Env -> EgisonTopExpr -> IO (Either EgisonError Env)