-- 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