-- 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 programs *-test.egi in -- sample/ directory. This package also include Emacs Lisp file -- egison-mode.el in elisp/ directory. @package egison @version 3.0.4 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 IndexedExpr :: EgisonExpr -> [EgisonExpr] -> EgisonExpr InductiveDataExpr :: String -> [EgisonExpr] -> EgisonExpr TupleExpr :: [EgisonExpr] -> EgisonExpr CollectionExpr :: (Seq InnerExpr) -> EgisonExpr ArrayExpr :: [EgisonExpr] -> EgisonExpr LambdaExpr :: [String] -> EgisonExpr -> EgisonExpr PatternFunctionExpr :: [String] -> EgisonPattern -> EgisonExpr IfExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr -> EgisonExpr LetExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr LetRecExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr MatchExpr :: EgisonExpr -> EgisonExpr -> [MatchClause] -> EgisonExpr MatchAllExpr :: EgisonExpr -> EgisonExpr -> MatchClause -> EgisonExpr MatchLambdaExpr :: EgisonExpr -> [MatchClause] -> EgisonExpr MatcherExpr :: MatcherInfo -> EgisonExpr DoExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr ApplyExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr AlgebraicDataMatcherExpr :: [(String, [EgisonExpr])] -> EgisonExpr GenerateArrayExpr :: [String] -> EgisonExpr -> EgisonExpr -> EgisonExpr ArraySizeExpr :: EgisonExpr -> EgisonExpr ArrayRefExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr ValueExpr :: EgisonValue -> EgisonExpr SomethingExpr :: EgisonExpr UndefinedExpr :: EgisonExpr type BindingExpr = ([String], EgisonExpr) type MatchClause = (EgisonPattern, EgisonExpr) type MatcherInfo = [(PrimitivePatPattern, EgisonExpr, [(PrimitiveDataPattern, EgisonExpr)])] data EgisonPattern WildCard :: EgisonPattern PatVar :: String -> EgisonPattern VarPat :: String -> EgisonPattern ValuePat :: EgisonExpr -> EgisonPattern PredPat :: EgisonExpr -> EgisonPattern IndexedPat :: EgisonPattern -> [EgisonExpr] -> EgisonPattern CutPat :: EgisonPattern -> EgisonPattern NotPat :: EgisonPattern -> EgisonPattern AndPat :: [EgisonPattern] -> EgisonPattern OrPat :: [EgisonPattern] -> EgisonPattern TuplePat :: [EgisonPattern] -> EgisonPattern InductivePat :: String -> [EgisonPattern] -> EgisonPattern ApplyPat :: EgisonExpr -> [EgisonPattern] -> EgisonPattern LoopPat :: String -> EgisonExpr -> EgisonPattern -> EgisonPattern -> EgisonPattern ContPat :: 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 :: (Seq EgisonValue) -> EgisonValue Array :: (IntMap EgisonValue) -> EgisonValue Matcher :: Matcher -> EgisonValue Func :: Env -> [String] -> EgisonExpr -> EgisonValue PatternFunc :: Env -> [String] -> EgisonPattern -> EgisonValue PrimitiveFunc :: PrimitiveFunc -> EgisonValue IOFunc :: (EgisonM WHNFData) -> EgisonValue Port :: Handle -> EgisonValue Something :: EgisonValue Undefined :: EgisonValue EOF :: EgisonValue type Matcher = (Env, MatcherInfo) type PrimitiveFunc = [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 :: (Seq Inner) -> Intermediate IArray :: (IntMap ObjectRef) -> 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 fromMatcherValue :: WHNFData -> Either EgisonError Matcher fromPrimitiveValue :: WHNFData -> Either EgisonError EgisonValue type Var = String type Env = [HashMap Var ObjectRef] type Binding = (Var, ObjectRef) nullEnv :: Env extendEnv :: Env -> [Binding] -> Env refVar :: Env -> Var -> EgisonM ObjectRef data MatchingState MState :: Env -> [LoopContext] -> [Binding] -> [MatchingTree] -> MatchingState data MatchingTree MAtom :: EgisonPattern -> ObjectRef -> WHNFData -> MatchingTree MNode :: [PatternBinding] -> MatchingState -> MatchingTree type PatternBinding = (Var, EgisonPattern) data LoopContext LoopContext :: (String, ObjectRef) -> ObjectRef -> EgisonPattern -> EgisonPattern -> LoopContext 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 FreshT m a FreshT :: StateT Int m a -> FreshT m a unFreshT :: FreshT m a -> StateT Int m a type Fresh = FreshT Identity class (Applicative m, Monad m) => MonadFresh m fresh :: MonadFresh m => m String runFreshT :: Monad m => Int -> FreshT m a -> m (a, Int) runFresh :: Int -> Fresh a -> (a, Int) newtype EgisonM a EgisonM :: ErrorT EgisonError (FreshT IO) a -> EgisonM a unEgisonM :: EgisonM a -> ErrorT EgisonError (FreshT IO) a runEgisonM :: EgisonM a -> FreshT IO (Either EgisonError a) liftEgisonM :: Fresh (Either EgisonError a) -> EgisonM 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 fromSeq :: Monad m => Seq 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 Functor m => Functor (FreshT m) instance (Monad m, Functor m) => Applicative (FreshT m) instance Monad m => Monad (FreshT m) instance Monad m => MonadState Int (FreshT m) instance MonadTrans FreshT instance Functor EgisonM instance Applicative EgisonM instance Monad EgisonM instance MonadIO EgisonM instance MonadError EgisonError EgisonM instance Show PrimitiveDataPattern instance Show EgisonExpr instance Show InnerExpr instance Show EgisonPattern instance Show EgisonTopExpr instance MonadIO (FreshT IO) instance MonadState s m => MonadState s (FreshT m) instance MonadError e m => MonadError e (FreshT m) instance (Applicative m, Monad m) => MonadFresh (FreshT m) instance Error EgisonError instance Show EgisonError instance Show WHNFData instance Eq EgisonValue instance Show EgisonValue module Language.Egison.Desugar type Subst = [(String, EgisonExpr)] newtype DesugarM a DesugarM :: ReaderT Subst (ErrorT EgisonError Fresh) a -> DesugarM a unDesugarM :: DesugarM a -> ReaderT Subst (ErrorT EgisonError Fresh) a runDesugarM :: DesugarM a -> Fresh (Either EgisonError a) desugarTopExpr :: EgisonTopExpr -> DesugarM EgisonTopExpr desugar :: EgisonExpr -> DesugarM EgisonExpr desugarPattern :: EgisonPattern -> DesugarM EgisonPattern 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 MonadError EgisonError DesugarM instance MonadFresh DesugarM instance MonadReader Subst DesugarM instance MonadFresh (ReaderT Subst (ErrorT EgisonError Fresh)) module Language.Egison.Parser readTopExprs :: String -> Fresh (Either EgisonError [EgisonTopExpr]) readTopExpr :: String -> Fresh (Either EgisonError EgisonTopExpr) readExprs :: String -> Fresh (Either EgisonError [EgisonExpr]) readExpr :: String -> Fresh (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 -> WHNFData -> EgisonM WHNFData generateArray :: Env -> String -> EgisonExpr -> EgisonExpr -> 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 fromArray :: WHNFData -> EgisonM [ObjectRef] fromTuple :: WHNFData -> EgisonM [ObjectRef] fromCollection :: WHNFData -> EgisonM (MList EgisonM ObjectRef) patternMatch :: Env -> EgisonPattern -> ObjectRef -> WHNFData -> EgisonM (MList EgisonM [Binding]) processMStates :: [MList EgisonM MatchingState] -> EgisonM (MList EgisonM [Binding]) processMState :: MatchingState -> EgisonM (MList EgisonM MatchingState) inductiveMatch :: Env -> EgisonPattern -> ObjectRef -> Matcher -> EgisonM ([EgisonPattern], MList EgisonM ObjectRef, [WHNFData]) primitivePatPatternMatch :: Env -> PrimitivePatPattern -> EgisonPattern -> MatchM ([EgisonPattern], [Binding]) primitiveDataPatternMatch :: PrimitiveDataPattern -> ObjectRef -> MatchM [Binding] expandCollection :: WHNFData -> EgisonM (Seq 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 counter :: IORef Int version :: Version loadLibraries :: Env -> IO Env loadPrimitives :: Env -> IO Env runEgisonTopExpr :: Env -> String -> IO (Either EgisonError Env) evalEgisonTopExpr :: Env -> EgisonTopExpr -> IO (Either EgisonError Env) evalEgisonTopExprs :: Env -> [EgisonTopExpr] -> IO (Either EgisonError Env)