-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Programming language with non-linear pattern-matching against non-free data -- -- An interpreter for Egison, a **pattern-matching-oriented**, purely -- functional programming language. We can directly represent -- pattern-matching against lists, multisets, sets, trees, graphs and any -- kind of data types. -- -- We can find Egison programs in lib and sample -- directories. This package also include Emacs Lisp file -- elisp/egison-mode.el. -- -- We can do non-linear pattern-matching against non-free data types in -- Egison. An non-free data type is a data type whose data have no -- canonical form, a standard way to represent that object. It enables us -- to write elegant programs. -- -- Twin Primes -- -- We can use pattern-matching for enumeration. The following code -- enumerates all twin primes from the infinite list of prime numbers -- with pattern-matching! -- -- -- Poker Hands -- -- The following code is the program that determines poker-hands written -- in Egison. All hands are expressed in a single pattern. -- -- -- Mahjong -- -- We can write a pattern even against mahjong tiles. We modularize -- patterns to represent complex mahjong hands. -- -- -- Graphs -- -- We can pattern-match against graphs. We can write program to solve the -- travelling salesman problem in a single pattern-matching expression. -- -- -- Aren't thsese exciting? We can run these demonstrations on our -- website! Please view and try more demonstrations! -- -- http://www.egison.org -- -- Egison makes programming dramatically simple. Please enjoy Egison! @package egison @version 3.7.5 -- | This module contains type definitions of Egison Data. module Language.Egison.Types data EgisonTopExpr Define :: Var -> EgisonExpr -> EgisonTopExpr Redefine :: Var -> EgisonExpr -> EgisonTopExpr Test :: EgisonExpr -> EgisonTopExpr Execute :: EgisonExpr -> EgisonTopExpr LoadFile :: String -> EgisonTopExpr Load :: String -> EgisonTopExpr data EgisonExpr CharExpr :: Char -> EgisonExpr StringExpr :: Text -> EgisonExpr BoolExpr :: Bool -> EgisonExpr IntegerExpr :: Integer -> EgisonExpr FloatExpr :: Double -> Double -> EgisonExpr VarExpr :: String -> EgisonExpr FreshVarExpr :: EgisonExpr IndexedExpr :: Bool -> EgisonExpr -> [Index EgisonExpr] -> EgisonExpr SubrefsExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr SuprefsExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr UserIndexedExpr :: EgisonExpr -> [UserIndex EgisonExpr] -> EgisonExpr PowerExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr InductiveDataExpr :: String -> [EgisonExpr] -> EgisonExpr TupleExpr :: [EgisonExpr] -> EgisonExpr CollectionExpr :: [InnerExpr] -> EgisonExpr ArrayExpr :: [EgisonExpr] -> EgisonExpr HashExpr :: [(EgisonExpr, EgisonExpr)] -> EgisonExpr VectorExpr :: [EgisonExpr] -> EgisonExpr LambdaExpr :: [Arg] -> EgisonExpr -> EgisonExpr MemoizedLambdaExpr :: [String] -> EgisonExpr -> EgisonExpr MemoizeExpr :: [(EgisonExpr, EgisonExpr, EgisonExpr)] -> EgisonExpr -> EgisonExpr CambdaExpr :: String -> EgisonExpr -> EgisonExpr ProcedureExpr :: [String] -> EgisonExpr -> EgisonExpr MacroExpr :: [String] -> EgisonExpr -> EgisonExpr PatternFunctionExpr :: [String] -> EgisonPattern -> EgisonExpr IfExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr -> EgisonExpr LetRecExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr LetExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr LetStarExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr WithSymbolsExpr :: [String] -> 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 AlgebraicDataMatcherExpr :: [(String, [EgisonExpr])] -> EgisonExpr QuoteExpr :: EgisonExpr -> EgisonExpr QuoteFunctionExpr :: EgisonExpr -> EgisonExpr WedgeExpr :: EgisonExpr -> EgisonExpr WedgeApplyExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr DoExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr IoExpr :: EgisonExpr -> EgisonExpr SeqExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr ApplyExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr CApplyExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr PartialExpr :: Integer -> EgisonExpr -> EgisonExpr PartialVarExpr :: Integer -> EgisonExpr RecVarExpr :: EgisonExpr GenerateArrayExpr :: EgisonExpr -> (EgisonExpr, EgisonExpr) -> EgisonExpr ArrayBoundsExpr :: EgisonExpr -> EgisonExpr ArrayRefExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr ParExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr PseqExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr PmapExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr GenerateTensorExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr TensorExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr -> EgisonExpr -> EgisonExpr TensorContractExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr TensorMapExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr TensorMap2Expr :: EgisonExpr -> EgisonExpr -> EgisonExpr -> EgisonExpr TransposeExpr :: 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 OrderedOrPat :: [EgisonPattern] -> EgisonPattern TuplePat :: [EgisonPattern] -> EgisonPattern InductivePat :: String -> [EgisonPattern] -> EgisonPattern LoopPat :: String -> LoopRange -> EgisonPattern -> EgisonPattern -> EgisonPattern ContPat :: EgisonPattern PApplyPat :: EgisonExpr -> [EgisonPattern] -> EgisonPattern VarPat :: String -> EgisonPattern DApplyPat :: EgisonPattern -> [EgisonPattern] -> EgisonPattern DivPat :: EgisonPattern -> EgisonPattern -> EgisonPattern PlusPat :: [EgisonPattern] -> EgisonPattern MultPat :: [EgisonPattern] -> EgisonPattern PowerPat :: EgisonPattern -> EgisonPattern -> EgisonPattern data Arg ScalarArg :: String -> Arg TensorArg :: String -> Arg data Index a Subscript :: a -> Index a Superscript :: a -> Index a SupSubscript :: a -> Index a DFscript :: Integer -> Integer -> Index a data UserIndex a Userscript :: a -> UserIndex a 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 PDTuplePat :: [PrimitiveDataPattern] -> PrimitiveDataPattern PDEmptyPat :: PrimitiveDataPattern PDConsPat :: PrimitiveDataPattern -> PrimitiveDataPattern -> PrimitiveDataPattern PDSnocPat :: PrimitiveDataPattern -> PrimitiveDataPattern -> PrimitiveDataPattern PDConstantPat :: EgisonExpr -> PrimitiveDataPattern type Matcher = EgisonValue type PrimitiveFunc = WHNFData -> EgisonM WHNFData class EgisonData a toEgison :: EgisonData a => a -> EgisonValue fromEgison :: EgisonData a => EgisonValue -> EgisonM a showTSV :: EgisonValue -> String data EgisonValue World :: EgisonValue Char :: Char -> EgisonValue String :: Text -> EgisonValue Bool :: Bool -> EgisonValue ScalarData :: ScalarData -> EgisonValue TensorData :: (Tensor EgisonValue) -> EgisonValue UserIndexedData :: EgisonValue -> [UserIndex EgisonValue] -> EgisonValue Float :: Double -> Double -> EgisonValue InductiveData :: String -> [EgisonValue] -> EgisonValue Tuple :: [EgisonValue] -> EgisonValue Collection :: (Seq EgisonValue) -> EgisonValue Array :: (Array Integer EgisonValue) -> EgisonValue IntHash :: (HashMap Integer EgisonValue) -> EgisonValue CharHash :: (HashMap Char EgisonValue) -> EgisonValue StrHash :: (HashMap Text EgisonValue) -> EgisonValue UserMatcher :: Env -> PMMode -> MatcherInfo -> EgisonValue Func :: (Maybe String) -> Env -> [String] -> EgisonExpr -> EgisonValue PartialFunc :: Env -> Integer -> EgisonExpr -> EgisonValue CFunc :: (Maybe String) -> Env -> String -> EgisonExpr -> EgisonValue MemoizedFunc :: (Maybe String) -> ObjectRef -> (IORef (HashMap [Integer] ObjectRef)) -> Env -> [String] -> EgisonExpr -> EgisonValue Proc :: (Maybe String) -> Env -> [String] -> EgisonExpr -> EgisonValue Macro :: [String] -> EgisonExpr -> EgisonValue PatternFunc :: Env -> [String] -> EgisonPattern -> EgisonValue PrimitiveFunc :: String -> PrimitiveFunc -> EgisonValue IOFunc :: (EgisonM WHNFData) -> EgisonValue QuotedFunc :: EgisonValue -> EgisonValue Port :: Handle -> EgisonValue Something :: EgisonValue Undefined :: EgisonValue EOF :: EgisonValue data ScalarData Div :: PolyExpr -> PolyExpr -> ScalarData data PolyExpr Plus :: [TermExpr] -> PolyExpr data TermExpr Term :: Integer -> [(SymbolExpr, Integer)] -> TermExpr data SymbolExpr Symbol :: String -> String -> [Index ScalarData] -> SymbolExpr Apply :: EgisonValue -> [ScalarData] -> SymbolExpr Quote :: ScalarData -> SymbolExpr data Tensor a Tensor :: [Integer] -> (Vector a) -> [Index EgisonValue] -> Tensor a Scalar :: a -> Tensor a class HasTensor a tensorElems :: HasTensor a => a -> Vector a tensorSize :: HasTensor a => a -> [Integer] tensorIndices :: HasTensor a => a -> [Index EgisonValue] fromTensor :: HasTensor a => (Tensor a) -> EgisonM a toTensor :: HasTensor a => a -> EgisonM (Tensor a) undef :: HasTensor a => a initTensor :: [Integer] -> [a] -> [EgisonValue] -> [EgisonValue] -> (Tensor a) tSize :: (Tensor a) -> [Integer] tToList :: (Tensor a) -> [a] tIndex :: (Tensor a) -> [Index EgisonValue] tref :: HasTensor a => [Index EgisonValue] -> (Tensor a) -> EgisonM a enumTensorIndices :: [Integer] -> [[Integer]] tTranspose :: HasTensor a => [Index EgisonValue] -> (Tensor a) -> EgisonM (Tensor a) tTranspose' :: HasTensor a => [EgisonValue] -> (Tensor a) -> EgisonM (Tensor a) appendDFscripts :: Integer -> WHNFData -> EgisonM WHNFData removeDFscripts :: WHNFData -> EgisonM WHNFData tMap :: HasTensor a => (a -> EgisonM a) -> (Tensor a) -> EgisonM (Tensor a) tMap2 :: HasTensor a => (a -> a -> EgisonM a) -> Tensor a -> Tensor a -> EgisonM (Tensor a) tMapN :: HasTensor a => ([a] -> EgisonM a) -> [Tensor a] -> EgisonM (Tensor a) tSum :: HasTensor a => (a -> a -> EgisonM a) -> (Tensor a) -> (Tensor a) -> EgisonM (Tensor a) tProduct :: HasTensor a => (a -> a -> EgisonM a) -> (Tensor a) -> (Tensor a) -> EgisonM (Tensor a) tContract :: HasTensor a => (Tensor a) -> EgisonM [Tensor a] tContract' :: HasTensor a => (Tensor a) -> EgisonM (Tensor a) tConcat :: HasTensor a => Index EgisonValue -> [Tensor a] -> EgisonM (Tensor a) tConcat' :: HasTensor a => [Tensor a] -> EgisonM (Tensor a) symbolScalarData :: String -> String -> EgisonValue mathExprToEgison :: ScalarData -> EgisonValue egisonToScalarData :: EgisonValue -> EgisonM ScalarData mathNormalize' :: ScalarData -> ScalarData mathFold :: ScalarData -> ScalarData mathSymbolFold :: ScalarData -> ScalarData mathTermFold :: ScalarData -> ScalarData mathRemoveZero :: ScalarData -> ScalarData mathDivide :: ScalarData -> ScalarData mathPlus :: ScalarData -> ScalarData -> ScalarData mathMult :: ScalarData -> ScalarData -> ScalarData mathNegate :: ScalarData -> ScalarData mathNumerator :: ScalarData -> ScalarData mathDenominator :: ScalarData -> ScalarData extractScalar :: EgisonValue -> EgisonM ScalarData extractScalar' :: WHNFData -> EgisonM ScalarData 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 ICharHash :: (HashMap Char ObjectRef) -> Intermediate IStrHash :: (HashMap Text ObjectRef) -> Intermediate ITensor :: (Tensor WHNFData) -> Intermediate data Inner IElement :: ObjectRef -> Inner ISubCollection :: ObjectRef -> Inner class (EgisonData a) => EgisonWHNF a where toWHNF = Value . toEgison toWHNF :: EgisonWHNF a => a -> WHNFData fromWHNF :: EgisonWHNF a => WHNFData -> EgisonM a data Env Env :: [HashMap String ObjectRef] -> Env data Var Var :: String -> [Index ()] -> Var data VarWithIndices VarWithIndices :: String -> [Index String] -> VarWithIndices type Binding = (String, ObjectRef) nullEnv :: Env extendEnv :: Env -> [Binding] -> Env refVar :: Env -> String -> Maybe ObjectRef type Match = [Binding] data PMMode BFSMode :: PMMode DFSMode :: PMMode pmMode :: Matcher -> PMMode data MatchingState MState :: Env -> [LoopPatContext] -> [Binding] -> [MatchingTree] -> MatchingState data MatchingTree MAtom :: EgisonPattern -> WHNFData -> Matcher -> MatchingTree MNode :: [PatternBinding] -> MatchingState -> MatchingTree type PatternBinding = (String, EgisonPattern) data LoopPatContext LoopPatContext :: Binding -> ObjectRef -> EgisonPattern -> EgisonPattern -> EgisonPattern -> LoopPatContext data EgisonError UnboundVariable :: String -> EgisonError TypeMismatch :: String -> WHNFData -> EgisonError ArgumentsNumWithNames :: [String] -> Int -> Int -> EgisonError ArgumentsNumPrimitive :: Int -> Int -> EgisonError ArgumentsNum :: Int -> Int -> EgisonError InconsistentTensorSize :: EgisonError InconsistentTensorIndex :: EgisonError TensorIndexOutOfBounds :: Integer -> Integer -> 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 :: (ExceptT EgisonError (FreshT IO) a) -> EgisonM a [unEgisonM] :: EgisonM a -> (ExceptT EgisonError (FreshT IO) a) parallelMapM :: (a -> EgisonM b) -> [a] -> EgisonM [b] 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, Int) m a -> FreshT m a [unFreshT] :: FreshT m a -> StateT (Int, Int) m a type Fresh = FreshT Identity class (Applicative m, Monad m) => MonadFresh m fresh :: MonadFresh m => m String runFreshT :: Monad m => (Int, Int) -> FreshT m a -> m (a, (Int, 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) isBool :: EgisonValue -> Bool isInteger :: EgisonValue -> Bool isRational :: EgisonValue -> Bool isSymbol :: EgisonValue -> Bool isScalar :: EgisonValue -> Bool isTensor :: EgisonValue -> Bool isTensorWithIndex :: EgisonValue -> Bool isBool' :: PrimitiveFunc isInteger' :: PrimitiveFunc isRational' :: PrimitiveFunc isScalar' :: PrimitiveFunc isFloat' :: PrimitiveFunc isComplex' :: PrimitiveFunc isTensor' :: PrimitiveFunc isTensorWithIndex' :: PrimitiveFunc isChar' :: PrimitiveFunc isString' :: PrimitiveFunc isCollection' :: PrimitiveFunc isArray' :: PrimitiveFunc isHash' :: PrimitiveFunc instance GHC.Show.Show Language.Egison.Types.MatchingTree instance GHC.Show.Show Language.Egison.Types.MatchingState instance GHC.Show.Show Language.Egison.Types.LoopPatContext instance GHC.Classes.Eq Language.Egison.Types.SymbolExpr instance GHC.Classes.Eq Language.Egison.Types.ScalarData instance GHC.Show.Show Language.Egison.Types.Env instance GHC.Show.Show a => GHC.Show.Show (Language.Egison.Types.Tensor a) instance Language.Egison.Types.MonadFresh Language.Egison.Types.EgisonM instance Control.Monad.Error.Class.MonadError Language.Egison.Types.EgisonError Language.Egison.Types.EgisonM instance Control.Monad.IO.Class.MonadIO Language.Egison.Types.EgisonM instance GHC.Base.Monad Language.Egison.Types.EgisonM instance GHC.Base.Applicative Language.Egison.Types.EgisonM instance GHC.Base.Functor Language.Egison.Types.EgisonM instance Control.Monad.Trans.Class.MonadTrans Language.Egison.Types.FreshT instance GHC.Base.Monad m => Control.Monad.State.Class.MonadState (GHC.Types.Int, GHC.Types.Int) (Language.Egison.Types.FreshT m) instance GHC.Base.Monad m => GHC.Base.Monad (Language.Egison.Types.FreshT m) instance GHC.Base.Monad m => GHC.Base.Applicative (Language.Egison.Types.FreshT m) instance GHC.Base.Functor m => GHC.Base.Functor (Language.Egison.Types.FreshT m) instance GHC.Show.Show Language.Egison.Types.PMMode instance GHC.Classes.Eq Language.Egison.Types.VarWithIndices instance GHC.Classes.Eq Language.Egison.Types.EgisonTopExpr instance GHC.Show.Show Language.Egison.Types.EgisonTopExpr instance GHC.Classes.Eq Language.Egison.Types.Var instance GHC.Classes.Eq Language.Egison.Types.InnerExpr instance GHC.Show.Show Language.Egison.Types.InnerExpr instance GHC.Classes.Eq Language.Egison.Types.LoopRange instance GHC.Show.Show Language.Egison.Types.LoopRange instance GHC.Classes.Eq Language.Egison.Types.EgisonPattern instance GHC.Show.Show Language.Egison.Types.EgisonPattern instance GHC.Classes.Eq Language.Egison.Types.EgisonExpr instance GHC.Classes.Eq Language.Egison.Types.PrimitiveDataPattern instance GHC.Show.Show Language.Egison.Types.PrimitiveDataPattern instance GHC.Classes.Eq Language.Egison.Types.PrimitivePatPattern instance GHC.Show.Show Language.Egison.Types.PrimitivePatPattern instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.Egison.Types.UserIndex a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.Egison.Types.Index a) instance GHC.Classes.Eq Language.Egison.Types.Arg instance GHC.Classes.Eq Language.Egison.Types.PolyExpr instance GHC.Classes.Eq Language.Egison.Types.TermExpr instance Language.Egison.Types.HasTensor Language.Egison.Types.EgisonValue instance Language.Egison.Types.HasTensor Language.Egison.Types.WHNFData instance GHC.Show.Show Language.Egison.Types.EgisonExpr instance GHC.Show.Show Language.Egison.Types.EgisonValue instance GHC.Show.Show Language.Egison.Types.Arg instance GHC.Show.Show Language.Egison.Types.ScalarData instance GHC.Show.Show Language.Egison.Types.PolyExpr instance GHC.Show.Show Language.Egison.Types.TermExpr instance GHC.Show.Show Language.Egison.Types.SymbolExpr instance GHC.Classes.Eq Language.Egison.Types.EgisonValue instance Language.Egison.Types.EgisonData GHC.Types.Char instance Language.Egison.Types.EgisonData Data.Text.Internal.Text instance Language.Egison.Types.EgisonData GHC.Types.Bool instance Language.Egison.Types.EgisonData GHC.Integer.Type.Integer instance Language.Egison.Types.EgisonData GHC.Real.Rational instance Language.Egison.Types.EgisonData GHC.Types.Double instance Language.Egison.Types.EgisonData GHC.IO.Handle.Types.Handle instance Language.Egison.Types.EgisonData a => Language.Egison.Types.EgisonData [a] instance Language.Egison.Types.EgisonData () instance (Language.Egison.Types.EgisonData a, Language.Egison.Types.EgisonData b) => Language.Egison.Types.EgisonData (a, b) instance (Language.Egison.Types.EgisonData a, Language.Egison.Types.EgisonData b, Language.Egison.Types.EgisonData c) => Language.Egison.Types.EgisonData (a, b, c) instance (Language.Egison.Types.EgisonData a, Language.Egison.Types.EgisonData b, Language.Egison.Types.EgisonData c, Language.Egison.Types.EgisonData d) => Language.Egison.Types.EgisonData (a, b, c, d) instance GHC.Show.Show Language.Egison.Types.WHNFData instance GHC.Show.Show Language.Egison.Types.Object instance GHC.Show.Show Language.Egison.Types.ObjectRef instance Language.Egison.Types.EgisonWHNF GHC.Types.Char instance Language.Egison.Types.EgisonWHNF Data.Text.Internal.Text instance Language.Egison.Types.EgisonWHNF GHC.Types.Bool instance Language.Egison.Types.EgisonWHNF GHC.Integer.Type.Integer instance Language.Egison.Types.EgisonWHNF GHC.Types.Double instance Language.Egison.Types.EgisonWHNF GHC.IO.Handle.Types.Handle instance GHC.Show.Show Language.Egison.Types.Var instance GHC.Show.Show Language.Egison.Types.VarWithIndices instance GHC.Show.Show (Language.Egison.Types.Index ()) instance GHC.Show.Show (Language.Egison.Types.Index GHC.Base.String) instance GHC.Show.Show (Language.Egison.Types.Index Language.Egison.Types.EgisonExpr) instance GHC.Show.Show (Language.Egison.Types.Index Language.Egison.Types.ScalarData) instance GHC.Show.Show (Language.Egison.Types.Index Language.Egison.Types.EgisonValue) instance GHC.Show.Show (Language.Egison.Types.UserIndex Language.Egison.Types.EgisonExpr) instance GHC.Show.Show (Language.Egison.Types.UserIndex Language.Egison.Types.ScalarData) instance GHC.Show.Show (Language.Egison.Types.UserIndex Language.Egison.Types.EgisonValue) instance GHC.Show.Show Language.Egison.Types.EgisonError instance GHC.Exception.Exception Language.Egison.Types.EgisonError instance (GHC.Base.Applicative m, GHC.Base.Monad m) => Language.Egison.Types.MonadFresh (Language.Egison.Types.FreshT m) instance Control.Monad.Error.Class.MonadError e m => Control.Monad.Error.Class.MonadError e (Language.Egison.Types.FreshT m) instance Control.Monad.State.Class.MonadState s m => Control.Monad.State.Class.MonadState s (Language.Egison.Types.FreshT m) instance Language.Egison.Types.MonadFresh m => Language.Egison.Types.MonadFresh (Control.Monad.Trans.State.Lazy.StateT s m) instance Language.Egison.Types.MonadFresh m => Language.Egison.Types.MonadFresh (Control.Monad.Trans.Except.ExceptT e m) instance (Language.Egison.Types.MonadFresh m, GHC.Base.Monoid e) => Language.Egison.Types.MonadFresh (Control.Monad.Trans.Reader.ReaderT e m) instance (Language.Egison.Types.MonadFresh m, GHC.Base.Monoid e) => Language.Egison.Types.MonadFresh (Control.Monad.Trans.Writer.Lazy.WriterT e m) instance Control.Monad.IO.Class.MonadIO (Language.Egison.Types.FreshT GHC.Types.IO) instance GHC.Show.Show (Language.Egison.Types.MList m a) -- | 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 Control.Monad.Reader.Class.MonadReader Language.Egison.Desugar.Subst Language.Egison.Desugar.DesugarM instance Language.Egison.Types.MonadFresh Language.Egison.Desugar.DesugarM instance Control.Monad.Error.Class.MonadError Language.Egison.Types.EgisonError Language.Egison.Desugar.DesugarM instance GHC.Base.Monad Language.Egison.Desugar.DesugarM instance GHC.Base.Applicative Language.Egison.Desugar.DesugarM instance GHC.Base.Functor Language.Egison.Desugar.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 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 -- | This module provides functions to evaluate various objects. module Language.Egison.Core evalTopExprs :: Env -> [EgisonTopExpr] -> EgisonM Env evalTopExprsTestOnly :: 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 :: Env -> WHNFData -> WHNFData -> EgisonM WHNFData refArray :: WHNFData -> [EgisonValue] -> EgisonM WHNFData arrayBounds :: WHNFData -> EgisonM WHNFData recursiveBind :: Env -> [(String, EgisonExpr)] -> EgisonM Env patternMatch :: Env -> EgisonPattern -> WHNFData -> Matcher -> EgisonM (MList EgisonM Match) isEmptyCollection :: WHNFData -> EgisonM Bool unconsCollection :: WHNFData -> MatchM (ObjectRef, ObjectRef) unsnocCollection :: WHNFData -> MatchM (ObjectRef, ObjectRef) tupleToList :: WHNFData -> EgisonM [EgisonValue] collectionToList :: WHNFData -> EgisonM [EgisonValue] packStringValue :: EgisonValue -> EgisonM Text -- | 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 Egison top expressions and execute test expressions evalEgisonTopExprsTestOnly :: 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