-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Programming language with non-linear pattern-matching against unfree data -- -- An interpreter for Egison, the programming langugage that realized -- non-linear pattern-matching against unfree data types. With Egison, we -- can directly represent pattern-matching against a wide range of data -- types such as lists, multisets, sets, trees and graphs. We can find -- Egison programs in lib and sample directories. This -- package also include Emacs Lisp file elisp/egison-mode.el. -- -- The following code is the program that determines poker-hands written -- in Egison. All hands are expressed in a single pattern. Isn't it -- exciting? We can run this code online at -- http://www.egison.org/demonstrations/poker-hands.html. -- -- -- The pattern-matching of Egison is very powerful. Please view and try -- more demonstrations. -- -- http://www.egison.org/demonstrations/ -- -- Egison is not popular at all now. Please help us to make Egison -- popular. @package egison @version 3.3.8 -- | This module contains type definitions of Egison Data. module Language.Egison.Types data EgisonTopExpr Define :: String -> EgisonExpr -> EgisonTopExpr Test :: EgisonExpr -> EgisonTopExpr Execute :: EgisonExpr -> EgisonTopExpr LoadFile :: String -> EgisonTopExpr Load :: String -> EgisonTopExpr data EgisonExpr CharExpr :: Char -> EgisonExpr StringExpr :: String -> EgisonExpr BoolExpr :: Bool -> EgisonExpr RationalExpr :: Rational -> 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 HashExpr :: [(EgisonExpr, EgisonExpr)] -> EgisonExpr LambdaExpr :: [String] -> EgisonExpr -> EgisonExpr MemoizedLambdaExpr :: [String] -> EgisonExpr -> EgisonExpr MemoizeExpr :: 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 MatchAllLambdaExpr :: EgisonExpr -> MatchClause -> EgisonExpr NextMatchExpr :: EgisonExpr -> EgisonExpr -> [MatchClause] -> EgisonExpr NextMatchAllExpr :: EgisonExpr -> EgisonExpr -> MatchClause -> EgisonExpr NextMatchLambdaExpr :: EgisonExpr -> [MatchClause] -> EgisonExpr NextMatchAllLambdaExpr :: EgisonExpr -> MatchClause -> EgisonExpr MatcherBFSExpr :: MatcherInfo -> EgisonExpr MatcherDFSExpr :: MatcherInfo -> EgisonExpr DoExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr IoExpr :: EgisonExpr -> EgisonExpr SeqExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr ApplyExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr AlgebraicDataMatcherExpr :: [(String, [EgisonExpr])] -> EgisonExpr GenerateArrayExpr :: [String] -> EgisonExpr -> EgisonExpr -> EgisonExpr ArrayBoundsExpr :: EgisonExpr -> EgisonExpr ArrayRefExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr SomethingExpr :: EgisonExpr UndefinedExpr :: EgisonExpr data EgisonPattern WildCard :: EgisonPattern PatVar :: String -> EgisonPattern ValuePat :: EgisonExpr -> EgisonPattern PredPat :: EgisonExpr -> EgisonPattern IndexedPat :: EgisonPattern -> [EgisonExpr] -> EgisonPattern LetPat :: [BindingExpr] -> EgisonPattern -> EgisonPattern NotPat :: EgisonPattern -> EgisonPattern AndPat :: [EgisonPattern] -> EgisonPattern OrPat :: [EgisonPattern] -> EgisonPattern TuplePat :: [EgisonPattern] -> EgisonPattern InductivePat :: String -> [EgisonPattern] -> EgisonPattern LoopPat :: String -> LoopRange -> EgisonPattern -> EgisonPattern -> EgisonPattern ContPat :: EgisonPattern ApplyPat :: EgisonExpr -> [EgisonPattern] -> EgisonPattern VarPat :: String -> EgisonPattern data InnerExpr ElementExpr :: EgisonExpr -> InnerExpr SubCollectionExpr :: EgisonExpr -> InnerExpr type BindingExpr = ([String], EgisonExpr) type MatchClause = (EgisonPattern, EgisonExpr) type MatcherInfo = [(PrimitivePatPattern, EgisonExpr, [(PrimitiveDataPattern, EgisonExpr)])] data LoopRange LoopRange :: EgisonExpr -> EgisonExpr -> EgisonPattern -> LoopRange 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 EgisonValue World :: EgisonValue Char :: Char -> EgisonValue Bool :: Bool -> EgisonValue Rational :: Rational -> EgisonValue Integer :: Integer -> EgisonValue Float :: Double -> EgisonValue InductiveData :: String -> [EgisonValue] -> EgisonValue Tuple :: [EgisonValue] -> EgisonValue Collection :: (Seq EgisonValue) -> EgisonValue Array :: (Array Integer EgisonValue) -> EgisonValue IntHash :: (HashMap Integer EgisonValue) -> EgisonValue StrHash :: (HashMap ByteString EgisonValue) -> EgisonValue UserMatcher :: Env -> PMMode -> MatcherInfo -> EgisonValue Func :: Env -> [String] -> EgisonExpr -> EgisonValue MemoizedFunc :: ObjectRef -> (IORef (HashMap [Integer] ObjectRef)) -> 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 = EgisonValue type PrimitiveFunc = WHNFData -> EgisonM WHNFData class Egison a toEgison :: Egison a => a -> EgisonValue fromEgison :: Egison a => EgisonValue -> EgisonM a data Object Thunk :: (EgisonM WHNFData) -> Object WHNF :: WHNFData -> Object -- | For memoization type ObjectRef = IORef Object data WHNFData Intermediate :: Intermediate -> WHNFData Value :: EgisonValue -> WHNFData data Intermediate IInductiveData :: String -> [ObjectRef] -> Intermediate ITuple :: [ObjectRef] -> Intermediate ICollection :: (IORef (Seq Inner)) -> Intermediate IArray :: (Array Integer ObjectRef) -> Intermediate IIntHash :: (HashMap Integer ObjectRef) -> Intermediate IStrHash :: (HashMap ByteString ObjectRef) -> Intermediate data Inner IElement :: ObjectRef -> Inner ISubCollection :: ObjectRef -> Inner class Egison a => EgisonWHNF a where toWHNF = Value . toEgison toWHNF :: EgisonWHNF a => a -> WHNFData fromWHNF :: EgisonWHNF a => WHNFData -> EgisonM a type Env = [HashMap Var ObjectRef] type Var = String type Binding = (Var, ObjectRef) nullEnv :: Env extendEnv :: Env -> [Binding] -> Env refVar :: Env -> Var -> EgisonM ObjectRef type Match = [Binding] data PMMode BFSMode :: PMMode DFSMode :: PMMode pmMode :: Matcher -> PMMode data MatchingState MState :: Env -> [LoopContext] -> [Binding] -> [MatchingTree] -> MatchingState data MatchingTree MAtom :: EgisonPattern -> ObjectRef -> Matcher -> MatchingTree MNode :: [PatternBinding] -> MatchingState -> MatchingTree type PatternBinding = (Var, EgisonPattern) data LoopContext LoopContext :: Binding -> ObjectRef -> EgisonPattern -> EgisonPattern -> EgisonPattern -> LoopContext data EgisonError UnboundVariable :: Var -> EgisonError TypeMismatch :: String -> WHNFData -> EgisonError ArgumentsNumWithNames :: [String] -> Int -> Int -> EgisonError ArgumentsNumPrimitive :: Int -> Int -> EgisonError ArgumentsNum :: Int -> Int -> EgisonError NotImplemented :: String -> EgisonError Assertion :: String -> EgisonError Match :: String -> EgisonError Parser :: String -> EgisonError Desugar :: String -> EgisonError EgisonBug :: String -> EgisonError Default :: String -> EgisonError liftError :: MonadError e m => Either e a -> m a 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 fromEgisonM :: EgisonM a -> IO (Either EgisonError 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) 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 Typeable EgisonError instance Show PrimitivePatPattern instance Show PrimitiveDataPattern instance Show EgisonExpr instance Show EgisonPattern instance Show LoopRange instance Show InnerExpr instance Show EgisonTopExpr instance Show PMMode 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 MonadFresh EgisonM instance Show LoopContext instance Show MatchingTree instance Show MatchingState instance Show (MList m a) instance MonadIO (FreshT IO) instance (MonadFresh m, Monoid e) => MonadFresh (WriterT e m) instance (MonadFresh m, Monoid e) => MonadFresh (ReaderT e m) instance (MonadFresh m, Error e) => MonadFresh (ErrorT e m) instance MonadFresh m => MonadFresh (StateT s m) 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 Exception EgisonError instance Show EgisonError instance EgisonWHNF Handle instance EgisonWHNF Double instance EgisonWHNF Rational instance EgisonWHNF Integer instance EgisonWHNF Bool instance EgisonWHNF Char instance Show ObjectRef instance Show Object instance Show WHNFData instance (Egison a, Egison b, Egison c, Egison d) => Egison (a, b, c, d) instance (Egison a, Egison b, Egison c) => Egison (a, b, c) instance (Egison a, Egison b) => Egison (a, b) instance Egison () instance Egison a => Egison [a] instance Egison Handle instance Egison Double instance Egison Rational instance Egison Integer instance Egison Bool instance Egison Char instance Eq EgisonValue instance Show EgisonValue -- | This module provide desugar functions. module Language.Egison.Desugar data DesugarM a runDesugarM :: DesugarM a -> Fresh (Either EgisonError a) desugarTopExpr :: EgisonTopExpr -> EgisonM EgisonTopExpr desugarExpr :: EgisonExpr -> EgisonM EgisonExpr desugar :: EgisonExpr -> DesugarM EgisonExpr instance Functor DesugarM instance Applicative DesugarM instance Monad DesugarM instance MonadError EgisonError DesugarM instance MonadFresh DesugarM instance MonadReader Subst DesugarM -- | This module provide Egison parser. module Language.Egison.Parser readTopExprs :: String -> EgisonM [EgisonTopExpr] readTopExpr :: String -> EgisonM EgisonTopExpr readExprs :: String -> EgisonM [EgisonExpr] readExpr :: String -> EgisonM EgisonExpr parseTopExprs :: String -> Either EgisonError [EgisonTopExpr] parseTopExpr :: String -> Either EgisonError EgisonTopExpr parseExprs :: String -> Either EgisonError [EgisonExpr] parseExpr :: String -> Either EgisonError EgisonExpr -- | Load a libary file loadLibraryFile :: FilePath -> EgisonM [EgisonTopExpr] -- | Load a file loadFile :: FilePath -> EgisonM [EgisonTopExpr] -- | This module provides functions to evaluate various objects. module Language.Egison.Core evalTopExprs :: Env -> [EgisonTopExpr] -> EgisonM Env evalTopExprsNoIO :: Env -> [EgisonTopExpr] -> EgisonM Env evalTopExpr :: Env -> EgisonTopExpr -> EgisonM Env evalExpr :: Env -> EgisonExpr -> EgisonM WHNFData evalExprDeep :: Env -> EgisonExpr -> EgisonM EgisonValue evalRef :: ObjectRef -> EgisonM WHNFData evalRefDeep :: ObjectRef -> EgisonM EgisonValue evalWHNF :: WHNFData -> EgisonM EgisonValue applyFunc :: WHNFData -> WHNFData -> EgisonM WHNFData recursiveBind :: Env -> [(String, EgisonExpr)] -> EgisonM Env patternMatch :: Env -> EgisonPattern -> ObjectRef -> Matcher -> EgisonM (MList EgisonM Match) isEmptyCollection :: WHNFData -> EgisonM Bool unconsCollection :: WHNFData -> MatchM (ObjectRef, ObjectRef) unsnocCollection :: WHNFData -> MatchM (ObjectRef, ObjectRef) evalStringWHNF :: WHNFData -> EgisonM String fromStringValue :: EgisonValue -> EgisonM String -- | This module provides primitive functions in Egison. module Language.Egison.Primitives primitiveEnv :: IO Env primitiveEnvNoIO :: IO Env -- | This is the top module of Egison. module Language.Egison -- | eval an Egison expression evalEgisonExpr :: Env -> EgisonExpr -> IO (Either EgisonError EgisonValue) -- | eval an Egison top expression evalEgisonTopExpr :: Env -> EgisonTopExpr -> IO (Either EgisonError Env) -- | eval Egison top expressions evalEgisonTopExprs :: Env -> [EgisonTopExpr] -> IO (Either EgisonError Env) -- | eval an Egison expression. Input is a Haskell string. runEgisonExpr :: Env -> String -> IO (Either EgisonError EgisonValue) -- | eval an Egison top expression. Input is a Haskell string. runEgisonTopExpr :: Env -> String -> IO (Either EgisonError Env) -- | eval Egison top expressions. Input is a Haskell string. runEgisonTopExprs :: Env -> String -> IO (Either EgisonError Env) -- | eval Egison top expressions without IO. Input is a Haskell string. runEgisonTopExprsNoIO :: Env -> String -> IO (Either EgisonError Env) -- | load an Egison library loadEgisonLibrary :: Env -> FilePath -> IO (Either EgisonError Env) -- | load an Egison file loadEgisonFile :: Env -> FilePath -> IO (Either EgisonError Env) -- | Environment that contains core libraries initialEnv :: IO Env -- | Environment that contains core libraries without IO primitives initialEnvNoIO :: IO Env -- | Version number version :: Version -- | This module provides utility functions. module Language.Egison.Util -- | Get Egison expression from the prompt. We can handle multiline input. getEgisonExpr :: String -> InputT IO (Maybe (String, EgisonTopExpr)) -- | Get Egison expression from the prompt. We can handle multiline input. getEgisonExprOrNewLine :: String -> InputT IO (Either (Maybe String) (String, EgisonTopExpr)) -- | Complete Egison keywords completeEgison :: Monad m => CompletionFunc m