-- 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.10.2 -- | This module defines the syntax of Egison. module Language.Egison.AST data EgisonTopExpr Define :: Var -> EgisonExpr -> EgisonTopExpr DefineWithIndices :: VarWithIndices -> 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 -> EgisonExpr VarExpr :: Var -> EgisonExpr FreshVarExpr :: EgisonExpr IndexedExpr :: Bool -> EgisonExpr -> [Index EgisonExpr] -> EgisonExpr SubrefsExpr :: Bool -> EgisonExpr -> EgisonExpr -> EgisonExpr SuprefsExpr :: Bool -> EgisonExpr -> EgisonExpr -> EgisonExpr UserrefsExpr :: Bool -> EgisonExpr -> 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 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 :: PMMode -> EgisonExpr -> EgisonExpr -> [MatchClause] -> EgisonExpr MatchAllExpr :: PMMode -> EgisonExpr -> EgisonExpr -> [MatchClause] -> EgisonExpr MatchLambdaExpr :: EgisonExpr -> [MatchClause] -> EgisonExpr MatchAllLambdaExpr :: EgisonExpr -> [MatchClause] -> EgisonExpr MatcherExpr :: [PatternDef] -> EgisonExpr AlgebraicDataMatcherExpr :: [(String, [EgisonExpr])] -> EgisonExpr QuoteExpr :: EgisonExpr -> EgisonExpr QuoteSymbolExpr :: EgisonExpr -> EgisonExpr WedgeApplyExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr DoExpr :: [BindingExpr] -> EgisonExpr -> EgisonExpr IoExpr :: EgisonExpr -> EgisonExpr UnaryOpExpr :: String -> EgisonExpr -> EgisonExpr BinaryOpExpr :: EgisonBinOp -> EgisonExpr -> EgisonExpr -> EgisonExpr SeqExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr ApplyExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr CApplyExpr :: EgisonExpr -> EgisonExpr -> EgisonExpr PartialExpr :: Integer -> EgisonExpr -> EgisonExpr PartialVarExpr :: Integer -> EgisonExpr GenerateArrayExpr :: EgisonExpr -> (EgisonExpr, EgisonExpr) -> EgisonExpr ArrayBoundsExpr :: EgisonExpr -> EgisonExpr ArrayRefExpr :: 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 FlipIndicesExpr :: EgisonExpr -> EgisonExpr FunctionExpr :: [EgisonExpr] -> EgisonExpr SomethingExpr :: EgisonExpr UndefinedExpr :: EgisonExpr data EgisonPattern WildCard :: EgisonPattern PatVar :: Var -> 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 :: Var -> LoopRange -> EgisonPattern -> EgisonPattern -> EgisonPattern ContPat :: EgisonPattern PApplyPat :: EgisonExpr -> [EgisonPattern] -> EgisonPattern VarPat :: String -> EgisonPattern SeqNilPat :: EgisonPattern SeqConsPat :: EgisonPattern -> EgisonPattern -> EgisonPattern LaterPatVar :: EgisonPattern DApplyPat :: EgisonPattern -> [EgisonPattern] -> EgisonPattern DivPat :: EgisonPattern -> EgisonPattern -> EgisonPattern PlusPat :: [EgisonPattern] -> EgisonPattern MultPat :: [EgisonPattern] -> EgisonPattern PowerPat :: EgisonPattern -> EgisonPattern -> EgisonPattern data Var Var :: [String] -> [Index ()] -> Var data VarWithIndices VarWithIndices :: [String] -> [Index String] -> VarWithIndices varToVarWithIndices :: Var -> VarWithIndices data Arg ScalarArg :: String -> Arg InvertedScalarArg :: String -> Arg TensorArg :: String -> Arg data Index a Subscript :: a -> Index a Superscript :: a -> Index a SupSubscript :: a -> Index a MultiSubscript :: a -> a -> Index a MultiSuperscript :: a -> a -> Index a DFscript :: Integer -> Integer -> Index a Userscript :: a -> Index a extractIndex :: Index a -> a data PMMode BFSMode :: PMMode DFSMode :: PMMode data InnerExpr ElementExpr :: EgisonExpr -> InnerExpr SubCollectionExpr :: EgisonExpr -> InnerExpr type BindingExpr = ([Var], EgisonExpr) type MatchClause = (EgisonPattern, EgisonExpr) type PatternDef = (PrimitivePatPattern, EgisonExpr, [(PrimitiveDataPattern, EgisonExpr)]) data LoopRange LoopRange :: EgisonExpr -> EgisonExpr -> EgisonPattern -> LoopRange data PrimitivePatPattern PPWildCard :: PrimitivePatPattern PPPatVar :: PrimitivePatPattern PPValuePat :: String -> PrimitivePatPattern PPInductivePat :: String -> [PrimitivePatPattern] -> PrimitivePatPattern PPTuplePat :: [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 data EgisonBinOp EgisonBinOp :: String -> String -> Int -> BinOpAssoc -> Bool -> EgisonBinOp [repr] :: EgisonBinOp -> String [func] :: EgisonBinOp -> String [priority] :: EgisonBinOp -> Int [assoc] :: EgisonBinOp -> BinOpAssoc [isWedge] :: EgisonBinOp -> Bool data BinOpAssoc LeftAssoc :: BinOpAssoc RightAssoc :: BinOpAssoc NonAssoc :: BinOpAssoc reservedBinops :: [EgisonBinOp] stringToVar :: String -> Var stringToVarExpr :: String -> EgisonExpr instance GHC.Classes.Eq Language.Egison.AST.EgisonTopExpr instance GHC.Show.Show Language.Egison.AST.EgisonTopExpr instance GHC.Classes.Eq Language.Egison.AST.InnerExpr instance GHC.Show.Show Language.Egison.AST.InnerExpr instance GHC.Classes.Eq Language.Egison.AST.PrimitiveDataPattern instance GHC.Show.Show Language.Egison.AST.PrimitiveDataPattern instance GHC.Show.Show Language.Egison.AST.LoopRange instance GHC.Classes.Eq Language.Egison.AST.LoopRange instance GHC.Show.Show Language.Egison.AST.EgisonPattern instance GHC.Classes.Eq Language.Egison.AST.EgisonPattern instance GHC.Show.Show Language.Egison.AST.EgisonExpr instance GHC.Classes.Eq Language.Egison.AST.EgisonExpr instance GHC.Show.Show Language.Egison.AST.EgisonBinOp instance GHC.Classes.Ord Language.Egison.AST.EgisonBinOp instance GHC.Classes.Eq Language.Egison.AST.EgisonBinOp instance GHC.Classes.Ord Language.Egison.AST.BinOpAssoc instance GHC.Classes.Eq Language.Egison.AST.BinOpAssoc instance GHC.Classes.Eq Language.Egison.AST.PrimitivePatPattern instance GHC.Show.Show Language.Egison.AST.PrimitivePatPattern instance GHC.Show.Show Language.Egison.AST.PMMode instance GHC.Classes.Eq Language.Egison.AST.PMMode instance GHC.Generics.Generic Language.Egison.AST.Var instance GHC.Classes.Eq Language.Egison.AST.Var instance GHC.Classes.Eq Language.Egison.AST.VarWithIndices instance Data.Traversable.Traversable Language.Egison.AST.Index instance GHC.Generics.Generic (Language.Egison.AST.Index a) instance Data.Foldable.Foldable Language.Egison.AST.Index instance GHC.Base.Functor Language.Egison.AST.Index instance GHC.Classes.Eq a => GHC.Classes.Eq (Language.Egison.AST.Index a) instance GHC.Show.Show Language.Egison.AST.Arg instance GHC.Classes.Eq Language.Egison.AST.Arg instance GHC.Show.Show (Language.Egison.AST.Index Language.Egison.AST.EgisonExpr) instance GHC.Show.Show Language.Egison.AST.BinOpAssoc instance Data.Hashable.Class.Hashable Language.Egison.AST.Var instance GHC.Show.Show Language.Egison.AST.Var instance GHC.Show.Show Language.Egison.AST.VarWithIndices instance Data.Hashable.Class.Hashable (Language.Egison.AST.Index ()) instance GHC.Show.Show (Language.Egison.AST.Index ()) instance GHC.Show.Show (Language.Egison.AST.Index GHC.Base.String) -- | This module provides command line options of Egison interpreter. module Language.Egison.CmdOptions data EgisonOpts EgisonOpts :: Maybe (String, [String]) -> Bool -> Maybe String -> Maybe String -> [(String, String)] -> [String] -> [String] -> Maybe String -> Maybe String -> Maybe String -> Bool -> Bool -> Bool -> Bool -> String -> Maybe String -> Bool -> EgisonOpts [optExecFile] :: EgisonOpts -> Maybe (String, [String]) [optShowVersion] :: EgisonOpts -> Bool [optEvalString] :: EgisonOpts -> Maybe String [optExecuteString] :: EgisonOpts -> Maybe String [optFieldInfo] :: EgisonOpts -> [(String, String)] [optLoadLibs] :: EgisonOpts -> [String] [optLoadFiles] :: EgisonOpts -> [String] [optSubstituteString] :: EgisonOpts -> Maybe String [optMapTsvInput] :: EgisonOpts -> Maybe String [optFilterTsvInput] :: EgisonOpts -> Maybe String [optTsvOutput] :: EgisonOpts -> Bool [optNoIO] :: EgisonOpts -> Bool [optShowBanner] :: EgisonOpts -> Bool [optTestOnly] :: EgisonOpts -> Bool [optPrompt] :: EgisonOpts -> String [optMathExpr] :: EgisonOpts -> Maybe String [optSExpr] :: EgisonOpts -> Bool defaultOption :: EgisonOpts cmdParser :: ParserInfo EgisonOpts -- | This module contains functions for mathematical expressions. module Language.Egison.MathExpr data ScalarData Div :: PolyExpr -> PolyExpr -> ScalarData newtype PolyExpr Plus :: [TermExpr] -> PolyExpr data TermExpr Term :: Integer -> Monomial -> TermExpr data SymbolExpr Symbol :: Id -> String -> [Index ScalarData] -> SymbolExpr Apply :: ScalarData -> [ScalarData] -> SymbolExpr Quote :: ScalarData -> SymbolExpr FunctionData :: ScalarData -> [ScalarData] -> [ScalarData] -> [Index ScalarData] -> SymbolExpr 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 instance GHC.Classes.Eq Language.Egison.MathExpr.ScalarData instance GHC.Classes.Eq Language.Egison.MathExpr.SymbolExpr instance GHC.Classes.Eq Language.Egison.MathExpr.PolyExpr instance GHC.Classes.Eq Language.Egison.MathExpr.TermExpr instance GHC.Show.Show Language.Egison.MathExpr.ScalarData instance GHC.Show.Show Language.Egison.MathExpr.PolyExpr instance GHC.Show.Show Language.Egison.MathExpr.TermExpr instance GHC.Show.Show Language.Egison.MathExpr.SymbolExpr instance GHC.Show.Show (Language.Egison.AST.Index Language.Egison.MathExpr.ScalarData) -- | This module provides translation from mathematical Egison expression -- into other languages / format of other computer algebra systems. module Language.Egison.MathOutput changeOutputInLang :: String -> String -> String instance GHC.Show.Show Language.Egison.MathOutput.MathExpr instance GHC.Classes.Eq Language.Egison.MathOutput.MathExpr instance GHC.Show.Show Language.Egison.MathOutput.MathIndex instance GHC.Classes.Eq Language.Egison.MathOutput.MathIndex -- | This module contains type definitions of Egison Data. module Language.Egison.Types data EgisonValue World :: EgisonValue Char :: Char -> EgisonValue String :: Text -> EgisonValue Bool :: Bool -> EgisonValue ScalarData :: ScalarData -> EgisonValue TensorData :: Tensor EgisonValue -> 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 CharHash :: HashMap Char EgisonValue -> EgisonValue StrHash :: HashMap Text EgisonValue -> EgisonValue UserMatcher :: Env -> [PatternDef] -> EgisonValue Func :: Maybe Var -> Env -> [String] -> EgisonExpr -> EgisonValue PartialFunc :: Env -> Integer -> EgisonExpr -> EgisonValue CFunc :: Maybe Var -> Env -> String -> EgisonExpr -> EgisonValue MemoizedFunc :: Maybe Var -> ObjectRef -> IORef (HashMap [Integer] ObjectRef) -> Env -> [String] -> EgisonExpr -> EgisonValue Proc :: Maybe String -> Env -> [String] -> EgisonExpr -> EgisonValue PatternFunc :: Env -> [String] -> EgisonPattern -> EgisonValue PrimitiveFunc :: String -> PrimitiveFunc -> EgisonValue IOFunc :: EgisonM WHNFData -> EgisonValue Port :: Handle -> EgisonValue Something :: EgisonValue Undefined :: EgisonValue EOF :: EgisonValue type Matcher = EgisonValue type PrimitiveFunc = WHNFData -> EgisonM WHNFData data EgisonHashKey IntKey :: Integer -> EgisonHashKey CharKey :: Char -> EgisonHashKey StrKey :: Text -> EgisonHashKey class EgisonData a toEgison :: EgisonData a => a -> EgisonValue fromEgison :: EgisonData a => EgisonValue -> EgisonM a 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 symbolScalarData :: String -> String -> EgisonValue symbolScalarData' :: String -> String -> ScalarData getSymId :: EgisonValue -> String getSymName :: EgisonValue -> String mathExprToEgison :: ScalarData -> EgisonValue egisonToScalarData :: EgisonValue -> EgisonM 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 toWHNF :: EgisonWHNF a => a -> WHNFData fromWHNF :: EgisonWHNF a => WHNFData -> EgisonM a data Env Env :: [HashMap Var ObjectRef] -> Maybe VarWithIndices -> Env type Binding = (Var, ObjectRef) nullEnv :: Env extendEnv :: Env -> [Binding] -> Env refVar :: Env -> Var -> Maybe ObjectRef type Match = [Binding] data MatchingTree MAtom :: EgisonPattern -> WHNFData -> Matcher -> MatchingTree MNode :: [PatternBinding] -> MatchingState -> MatchingTree data MatchingState MState :: Env -> [LoopPatContext] -> [SeqPatContext] -> [Binding] -> [MatchingTree] -> MatchingState [mStateEnv] :: MatchingState -> Env [loopPatCtx] :: MatchingState -> [LoopPatContext] [seqPatCtx] :: MatchingState -> [SeqPatContext] [mStateBindings] :: MatchingState -> [Binding] [mTrees] :: MatchingState -> [MatchingTree] type PatternBinding = (String, EgisonPattern) data LoopPatContext LoopPatContext :: Binding -> ObjectRef -> EgisonPattern -> EgisonPattern -> EgisonPattern -> LoopPatContext data SeqPatContext SeqPatContext :: [MatchingTree] -> EgisonPattern -> [Matcher] -> [WHNFData] -> SeqPatContext data EgisonError UnboundVariable :: String -> CallStack -> EgisonError TypeMismatch :: String -> WHNFData -> CallStack -> EgisonError ArgumentsNumWithNames :: [String] -> Int -> Int -> CallStack -> EgisonError ArgumentsNumPrimitive :: Int -> Int -> CallStack -> EgisonError TupleLength :: Int -> Int -> CallStack -> EgisonError InconsistentTensorSize :: CallStack -> EgisonError InconsistentTensorIndex :: CallStack -> EgisonError TensorIndexOutOfBounds :: Integer -> Integer -> CallStack -> EgisonError NotImplemented :: String -> CallStack -> EgisonError Assertion :: String -> CallStack -> EgisonError Parser :: String -> EgisonError EgisonBug :: String -> CallStack -> EgisonError MatchFailure :: String -> CallStack -> 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 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 RuntimeState m a -> FreshT m a [unFreshT] :: FreshT m a -> StateT RuntimeState m a type Fresh = FreshT Identity class (Applicative m, Monad m) => MonadFresh m fresh :: MonadFresh m => m String freshV :: MonadFresh m => m Var pushFuncName :: MonadFresh m => String -> m () topFuncName :: MonadFresh m => m String popFuncName :: MonadFresh m => m () getFuncNameStack :: MonadFresh m => m [String] runFreshT :: Monad m => RuntimeState -> FreshT m a -> m (a, RuntimeState) 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.SeqPatContext instance GHC.Show.Show Language.Egison.Types.MatchingTree instance GHC.Show.Show Language.Egison.Types.LoopPatContext 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 Language.Egison.Types.RuntimeState (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 a => GHC.Show.Show (Language.Egison.Types.MList m a) instance GHC.Show.Show Language.Egison.Types.MatchingState instance Language.Egison.Types.HasTensor Language.Egison.Types.EgisonValue instance Language.Egison.Types.HasTensor Language.Egison.Types.WHNFData 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 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.EgisonValue instance GHC.Classes.Eq Language.Egison.Types.EgisonValue 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 GHC.Show.Show (Language.Egison.AST.Index Language.Egison.Types.EgisonValue) instance GHC.Show.Show Language.Egison.Types.EgisonError instance GHC.Exception.Type.Exception Language.Egison.Types.EgisonError instance Control.Monad.Fail.MonadFail Language.Egison.Types.EgisonM instance (GHC.Base.Applicative m, GHC.Base.Monad m) => Language.Egison.Types.MonadFresh (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.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 Control.Monad.IO.Class.MonadIO (Language.Egison.Types.FreshT GHC.Types.IO) -- | This module contains functions for tensors. module Language.Egison.Tensor 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]] changeIndexList :: [Index String] -> [EgisonValue] -> [Index String] tTranspose :: HasTensor a => [Index EgisonValue] -> Tensor a -> EgisonM (Tensor a) tTranspose' :: HasTensor a => [EgisonValue] -> Tensor a -> EgisonM (Tensor a) tFlipIndices :: HasTensor a => 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) -- | This module contains pretty printing for Egison syntax module Language.Egison.Pretty prettyTopExprs :: [EgisonTopExpr] -> Doc [EgisonTopExpr] class PrettyS a prettyS :: PrettyS a => a -> String showTSV :: EgisonValue -> String instance Language.Egison.Pretty.PrettyS Language.Egison.AST.EgisonExpr instance Language.Egison.Pretty.PrettyS Language.Egison.Types.EgisonValue instance Language.Egison.Pretty.PrettyS Language.Egison.AST.Var instance Language.Egison.Pretty.PrettyS Language.Egison.AST.VarWithIndices instance Language.Egison.Pretty.PrettyS Language.Egison.AST.EgisonBinOp instance Language.Egison.Pretty.PrettyS Language.Egison.AST.InnerExpr instance Language.Egison.Pretty.PrettyS Language.Egison.AST.Arg instance Language.Egison.Pretty.PrettyS Language.Egison.MathExpr.ScalarData instance Language.Egison.Pretty.PrettyS Language.Egison.MathExpr.PolyExpr instance Language.Egison.Pretty.PrettyS Language.Egison.MathExpr.TermExpr instance Language.Egison.Pretty.PrettyS Language.Egison.MathExpr.SymbolExpr instance Language.Egison.Pretty.PrettyS a => Language.Egison.Pretty.PrettyS (Language.Egison.AST.Index a) instance Language.Egison.Pretty.PrettyS (Language.Egison.AST.Index Language.Egison.Types.EgisonValue) instance Language.Egison.Pretty.PrettyS Language.Egison.AST.EgisonPattern instance Language.Egison.Pretty.PrettyS Language.Egison.AST.LoopRange instance Data.Text.Prettyprint.Doc.Internal.Pretty Language.Egison.AST.EgisonTopExpr instance Data.Text.Prettyprint.Doc.Internal.Pretty Language.Egison.AST.EgisonExpr instance Data.Text.Prettyprint.Doc.Internal.Pretty Language.Egison.AST.Arg instance Data.Text.Prettyprint.Doc.Internal.Pretty Language.Egison.AST.Var instance Data.Text.Prettyprint.Doc.Internal.Pretty Language.Egison.AST.InnerExpr instance Data.Text.Prettyprint.Doc.Internal.Pretty Language.Egison.AST.BindingExpr instance Data.Text.Prettyprint.Doc.Internal.Pretty Language.Egison.AST.MatchClause instance Data.Text.Prettyprint.Doc.Internal.Pretty Language.Egison.AST.EgisonPattern -- | This module provide desugar functions. module Language.Egison.Desugar desugarTopExpr :: EgisonTopExpr -> EgisonM EgisonTopExpr desugarExpr :: EgisonExpr -> EgisonM EgisonExpr -- | This module provides the new parser of Egison. module Language.Egison.ParserNonS 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] instance GHC.Classes.Ord Language.Egison.ParserNonS.CustomError instance GHC.Classes.Eq Language.Egison.ParserNonS.CustomError instance Text.Megaparsec.Error.ShowErrorComponent Language.Egison.ParserNonS.CustomError -- | 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 :: EgisonOpts -> InputT IO (Maybe (String, EgisonTopExpr)) -- | Complete Egison keywords completeEgison :: Monad m => CompletionFunc m -- | This module provides functions to evaluate various objects. module Language.Egison.Core collectDefs :: EgisonOpts -> [EgisonTopExpr] -> [(Var, EgisonExpr)] -> [EgisonTopExpr] -> EgisonM ([(Var, EgisonExpr)], [EgisonTopExpr]) evalTopExpr' :: EgisonOpts -> StateT [(Var, EgisonExpr)] EgisonM Env -> EgisonTopExpr -> EgisonM (Maybe String, StateT [(Var, EgisonExpr)] 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 -> [(Var, EgisonExpr)] -> EgisonM Env patternMatch :: PMMode -> 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] -- | 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 evalTopExprs :: EgisonOpts -> Env -> [EgisonTopExpr] -> EgisonM Env evalTopExpr :: EgisonOpts -> Env -> EgisonTopExpr -> EgisonM Env -- | eval an Egison expression evalEgisonExpr :: Env -> EgisonExpr -> IO (Either EgisonError EgisonValue) -- | eval an Egison top expression evalEgisonTopExpr :: EgisonOpts -> Env -> EgisonTopExpr -> IO (Either EgisonError Env) -- | eval Egison top expressions evalEgisonTopExprs :: EgisonOpts -> Env -> [EgisonTopExpr] -> IO (Either EgisonError Env) -- | eval an Egison expression. Input is a Haskell string. runEgisonExpr :: EgisonOpts -> Env -> String -> IO (Either EgisonError EgisonValue) -- | eval an Egison top expression. Input is a Haskell string. runEgisonTopExpr :: EgisonOpts -> Env -> String -> IO (Either EgisonError Env) -- | eval an Egison top expression. Input is a Haskell string. runEgisonTopExpr' :: EgisonOpts -> StateT [(Var, EgisonExpr)] EgisonM Env -> String -> IO (Either EgisonError (Maybe String, StateT [(Var, EgisonExpr)] EgisonM Env)) -- | eval Egison top expressions. Input is a Haskell string. runEgisonTopExprs :: EgisonOpts -> Env -> String -> IO (Either EgisonError Env) -- | load an Egison library loadEgisonLibrary :: EgisonOpts -> Env -> FilePath -> IO (Either EgisonError Env) -- | load an Egison file loadEgisonFile :: EgisonOpts -> Env -> FilePath -> IO (Either EgisonError Env) -- | Environment that contains core libraries initialEnv :: EgisonOpts -> IO Env -- | Version number version :: Version