-- 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.2 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 :: [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 IndexLoopExpr :: String -> String -> String -> EgisonExpr -> EgisonExpr -> EgisonExpr -> 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 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 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 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 :: [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 -> [Binding] -> [MatchingTree] -> MatchingState data MatchingTree MAtom :: EgisonPattern -> ObjectRef -> WHNFData -> MatchingTree MNode :: [PatternBinding] -> MatchingState -> MatchingTree type PatternBinding = (Var, EgisonPattern) 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 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 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 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 [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)