egison-5.0.0: Programming language with non-linear pattern-matching against non-free data
LicenseMIT
Safe HaskellNone
LanguageGHC2021

Language.Egison.AST

Description

This module defines the syntax of Egison.

Synopsis

Documentation

data TopExpr Source #

Constructors

Define VarWithIndices Expr 
DefineWithType TypedVarWithIndices Expr

Definition with type annotation

Test Expr 
Execute Expr 
LoadFile String 
Load String 
InfixDecl Bool Op 
InductiveDecl String [String] [InductiveConstructor]

Inductive data type declaration with type parameters e.g., inductive Ordering := | Less | Equal | Greater inductive Maybe a := | Nothing | Just a String: type name, [String]: type parameters, [InductiveConstructor]: constructors

ClassDeclExpr ClassDecl

Type class declaration e.g., class Eq a where (==) (x: a) (y: a) : Bool

InstanceDeclExpr InstanceDecl

Type class instance declaration e.g., instance Eq Integer where (==) x y := x = y

PatternInductiveDecl String [String] [PatternConstructor]

Pattern inductive type declaration e.g., inductive pattern MyList a := | myNil | myCons a (MyList a) String: pattern type name, [String]: type parameters, [PatternConstructor]: constructors

PatternFunctionDecl String [String] [(String, TypeExpr)] TypeExpr Pattern

Pattern function declaration e.g., def pattern twin {a} (p1 : a) (p2 : MyList a) : MyList a := ... String: function name, [String]: type parameters, [(String, TypeExpr)]: parameters, TypeExpr: return type, Pattern: body

DeclareSymbol [String] (Maybe TypeExpr)

Symbol declaration e.g., declare symbol a11, a12, a21, a22 declare symbol x, y, z : Float [String]: symbol names, Maybe TypeExpr: optional type (defaults to Integer)

Instances

Instances details
Show TopExpr Source # 
Instance details

Defined in Language.Egison.AST

Pretty TopExpr Source # 
Instance details

Defined in Language.Egison.Pretty

Methods

pretty :: TopExpr -> Doc ann #

prettyList :: [TopExpr] -> Doc ann #

data Expr Source #

Constructors

ConstantExpr ConstantExpr 
VarExpr String 
FreshVarExpr 
IndexedExpr Bool Expr [IndexExpr Expr] 
SubrefsExpr Bool Expr Expr 
SuprefsExpr Bool Expr Expr 
UserrefsExpr Bool Expr Expr 
TupleExpr [Expr] 
CollectionExpr [Expr] 
ConsExpr Expr Expr 
JoinExpr Expr Expr 
HashExpr [(Expr, Expr)] 
VectorExpr [Expr] 
LambdaExpr [Arg ArgPattern] Expr 
LambdaExpr' [Arg VarWithIndices] Expr 
TypedLambdaExpr [(String, TypeExpr)] TypeExpr Expr

Lambda with typed parameters and return type

MemoizedLambdaExpr [String] Expr 
TypedMemoizedLambdaExpr [TypedParam] TypeExpr Expr

Memoized lambda with typed parameters

CambdaExpr String Expr 
PatternFunctionExpr [String] Pattern 
IfExpr Expr Expr Expr 
LetExpr [BindingExpr] Expr 
LetRecExpr [BindingExpr] Expr 
WithSymbolsExpr [String] Expr 
MatchExpr PMMode Expr Expr [MatchClause] 
MatchAllExpr PMMode Expr Expr [MatchClause] 
MatchLambdaExpr Expr [MatchClause] 
MatchAllLambdaExpr Expr [MatchClause] 
MatcherExpr [PatternDef] 
AlgebraicDataMatcherExpr [(String, [Expr])] 
QuoteExpr Expr 
QuoteSymbolExpr Expr 
WedgeApplyExpr Expr [Expr] 
DoExpr [BindingExpr] Expr 
PrefixExpr String Expr 
InfixExpr Op Expr Expr 
SectionExpr Op (Maybe Expr) (Maybe Expr) 
SeqExpr Expr Expr 
ApplyExpr Expr [Expr] 
AnonParamFuncExpr Integer Expr 
AnonTupleParamFuncExpr Integer Expr 
AnonListParamFuncExpr Integer Expr 
AnonParamExpr Integer 
GenerateTensorExpr Expr Expr 
TensorExpr Expr Expr 
TensorContractExpr Expr 
TensorMapExpr Expr Expr 
TensorMap2Expr Expr Expr Expr 
TransposeExpr Expr Expr 
FlipIndicesExpr Expr 
FunctionExpr [String] 
TypeAnnotation Expr TypeExpr

Expression with type annotation (expr : type)

Instances

Instances details
Show Expr Source # 
Instance details

Defined in Language.Egison.AST

Methods

showsPrec :: Int -> Expr -> ShowS #

show :: Expr -> String #

showList :: [Expr] -> ShowS #

Pretty Expr Source # 
Instance details

Defined in Language.Egison.Pretty

Methods

pretty :: Expr -> Doc ann #

prettyList :: [Expr] -> Doc ann #

Pretty MatchClause Source # 
Instance details

Defined in Language.Egison.Pretty

Methods

pretty :: MatchClause -> Doc ann #

prettyList :: [MatchClause] -> Doc ann #

data Arg a Source #

Constructors

Arg a 
InvertedArg a 

Instances

Instances details
Show a => Show (Arg a) Source # 
Instance details

Defined in Language.Egison.AST

Methods

showsPrec :: Int -> Arg a -> ShowS #

show :: Arg a -> String #

showList :: [Arg a] -> ShowS #

(Pretty a, Complex a) => Pretty (Arg a) Source # 
Instance details

Defined in Language.Egison.Pretty

Methods

pretty :: Arg a -> Doc ann #

prettyList :: [Arg a] -> Doc ann #

data IndexExpr a Source #

Instances

Instances details
Foldable IndexExpr Source # 
Instance details

Defined in Language.Egison.AST

Methods

fold :: Monoid m => IndexExpr m -> m #

foldMap :: Monoid m => (a -> m) -> IndexExpr a -> m #

foldMap' :: Monoid m => (a -> m) -> IndexExpr a -> m #

foldr :: (a -> b -> b) -> b -> IndexExpr a -> b #

foldr' :: (a -> b -> b) -> b -> IndexExpr a -> b #

foldl :: (b -> a -> b) -> b -> IndexExpr a -> b #

foldl' :: (b -> a -> b) -> b -> IndexExpr a -> b #

foldr1 :: (a -> a -> a) -> IndexExpr a -> a #

foldl1 :: (a -> a -> a) -> IndexExpr a -> a #

toList :: IndexExpr a -> [a] #

null :: IndexExpr a -> Bool #

length :: IndexExpr a -> Int #

elem :: Eq a => a -> IndexExpr a -> Bool #

maximum :: Ord a => IndexExpr a -> a #

minimum :: Ord a => IndexExpr a -> a #

sum :: Num a => IndexExpr a -> a #

product :: Num a => IndexExpr a -> a #

Traversable IndexExpr Source # 
Instance details

Defined in Language.Egison.AST

Methods

traverse :: Applicative f => (a -> f b) -> IndexExpr a -> f (IndexExpr b) #

sequenceA :: Applicative f => IndexExpr (f a) -> f (IndexExpr a) #

mapM :: Monad m => (a -> m b) -> IndexExpr a -> m (IndexExpr b) #

sequence :: Monad m => IndexExpr (m a) -> m (IndexExpr a) #

Functor IndexExpr Source # 
Instance details

Defined in Language.Egison.AST

Methods

fmap :: (a -> b) -> IndexExpr a -> IndexExpr b #

(<$) :: a -> IndexExpr b -> IndexExpr a #

Show a => Show (IndexExpr a) Source # 
Instance details

Defined in Language.Egison.AST

Eq a => Eq (IndexExpr a) Source # 
Instance details

Defined in Language.Egison.AST

Methods

(==) :: IndexExpr a -> IndexExpr a -> Bool #

(/=) :: IndexExpr a -> IndexExpr a -> Bool #

Pretty (IndexExpr String) Source # 
Instance details

Defined in Language.Egison.Pretty

Methods

pretty :: IndexExpr String -> Doc ann #

prettyList :: [IndexExpr String] -> Doc ann #

(Pretty a, Complex a) => Pretty (IndexExpr a) Source # 
Instance details

Defined in Language.Egison.Pretty

Methods

pretty :: IndexExpr a -> Doc ann #

prettyList :: [IndexExpr a] -> Doc ann #

data PMMode Source #

Constructors

BFSMode 
DFSMode 

Instances

Instances details
Show PMMode Source # 
Instance details

Defined in Language.Egison.AST

data BindingExpr Source #

Constructors

Bind PrimitiveDataPattern Expr 
BindWithIndices VarWithIndices Expr 
BindWithType TypedVarWithIndices Expr

Binding with type annotation (for where clauses)

Instances

Instances details
Show BindingExpr Source # 
Instance details

Defined in Language.Egison.AST

Pretty BindingExpr Source # 
Instance details

Defined in Language.Egison.Pretty

Methods

pretty :: BindingExpr -> Doc ann #

prettyList :: [BindingExpr] -> Doc ann #

data PatternDef Source #

Pattern definition in a matcher (with optional type class constraints)

Instances

Instances details
Show PatternDef Source # 
Instance details

Defined in Language.Egison.AST

data LoopRange Source #

Constructors

LoopRange Expr Expr Pattern 

Instances

Instances details
Show LoopRange Source # 
Instance details

Defined in Language.Egison.AST

Pretty LoopRange Source # 
Instance details

Defined in Language.Egison.Pretty

Methods

pretty :: LoopRange -> Doc ann #

prettyList :: [LoopRange] -> Doc ann #

data PDPatternBase var Source #

Instances

Instances details
Foldable PDPatternBase Source # 
Instance details

Defined in Language.Egison.AST

Methods

fold :: Monoid m => PDPatternBase m -> m #

foldMap :: Monoid m => (a -> m) -> PDPatternBase a -> m #

foldMap' :: Monoid m => (a -> m) -> PDPatternBase a -> m #

foldr :: (a -> b -> b) -> b -> PDPatternBase a -> b #

foldr' :: (a -> b -> b) -> b -> PDPatternBase a -> b #

foldl :: (b -> a -> b) -> b -> PDPatternBase a -> b #

foldl' :: (b -> a -> b) -> b -> PDPatternBase a -> b #

foldr1 :: (a -> a -> a) -> PDPatternBase a -> a #

foldl1 :: (a -> a -> a) -> PDPatternBase a -> a #

toList :: PDPatternBase a -> [a] #

null :: PDPatternBase a -> Bool #

length :: PDPatternBase a -> Int #

elem :: Eq a => a -> PDPatternBase a -> Bool #

maximum :: Ord a => PDPatternBase a -> a #

minimum :: Ord a => PDPatternBase a -> a #

sum :: Num a => PDPatternBase a -> a #

product :: Num a => PDPatternBase a -> a #

Functor PDPatternBase Source # 
Instance details

Defined in Language.Egison.AST

Methods

fmap :: (a -> b) -> PDPatternBase a -> PDPatternBase b #

(<$) :: a -> PDPatternBase b -> PDPatternBase a #

Pretty PrimitiveDataPattern Source # 
Instance details

Defined in Language.Egison.Pretty

Pretty IPrimitiveDataPattern Source # 
Instance details

Defined in Language.Egison.Pretty

Show var => Show (PDPatternBase var) Source # 
Instance details

Defined in Language.Egison.AST

data Op Source #

Constructors

Op 

Fields

Instances

Instances details
Show Op Source # 
Instance details

Defined in Language.Egison.AST

Methods

showsPrec :: Int -> Op -> ShowS #

show :: Op -> String #

showList :: [Op] -> ShowS #

Eq Op Source # 
Instance details

Defined in Language.Egison.AST

Methods

(==) :: Op -> Op -> Bool #

(/=) :: Op -> Op -> Bool #

Ord Op Source # 
Instance details

Defined in Language.Egison.AST

Methods

compare :: Op -> Op -> Ordering #

(<) :: Op -> Op -> Bool #

(<=) :: Op -> Op -> Bool #

(>) :: Op -> Op -> Bool #

(>=) :: Op -> Op -> Bool #

max :: Op -> Op -> Op #

min :: Op -> Op -> Op #

Pretty Op Source # 
Instance details

Defined in Language.Egison.Pretty

Methods

pretty :: Op -> Doc ann #

prettyList :: [Op] -> Doc ann #

data Assoc Source #

Constructors

InfixL 
InfixR 
InfixN 
Prefix 

Instances

Instances details
Show Assoc Source # 
Instance details

Defined in Language.Egison.AST

Methods

showsPrec :: Int -> Assoc -> ShowS #

show :: Assoc -> String #

showList :: [Assoc] -> ShowS #

Eq Assoc Source # 
Instance details

Defined in Language.Egison.AST

Methods

(==) :: Assoc -> Assoc -> Bool #

(/=) :: Assoc -> Assoc -> Bool #

Ord Assoc Source # 
Instance details

Defined in Language.Egison.AST

Methods

compare :: Assoc -> Assoc -> Ordering #

(<) :: Assoc -> Assoc -> Bool #

(<=) :: Assoc -> Assoc -> Bool #

(>) :: Assoc -> Assoc -> Bool #

(>=) :: Assoc -> Assoc -> Bool #

max :: Assoc -> Assoc -> Assoc #

min :: Assoc -> Assoc -> Assoc #

data TypeExpr Source #

Type expression in source code

Constructors

TEInt

Integer (= MathExpr)

TEMathExpr

MathExpr (= Integer)

TEFloat

Float

TEBool

Bool

TEChar

Char

TEString

String

TEVar String

Type variable, e.g., a

TEList TypeExpr

List type, e.g., [a]

TETuple [TypeExpr]

Tuple type, e.g., (a, b)

TEFun TypeExpr TypeExpr

Function type, e.g., a -> b

TEMatcher TypeExpr

Matcher type

TEPattern TypeExpr

Pattern type, e.g., Pattern a

TEIO TypeExpr

IO type, e.g., IO ()

TETensor TypeExpr

Tensor type, e.g., Tensor a

TEVector TypeExpr

Vector type, e.g., Vector a (1D tensor)

TEMatrix TypeExpr

Matrix type, e.g., Matrix a (2D tensor)

TEDiffForm TypeExpr

DiffForm type, e.g., DiffForm a (differential form, alias for Tensor)

TEApp TypeExpr [TypeExpr]

Type application, e.g., List a

TEConstrained [ConstraintExpr] TypeExpr

Constrained type, e.g., Eq a => a

Instances

Instances details
Show TypeExpr Source # 
Instance details

Defined in Language.Egison.AST

Eq TypeExpr Source # 
Instance details

Defined in Language.Egison.AST

Pretty TypeExpr Source # 
Instance details

Defined in Language.Egison.Pretty

Methods

pretty :: TypeExpr -> Doc ann #

prettyList :: [TypeExpr] -> Doc ann #

data TensorShapeExpr Source #

Tensor shape expression

Constructors

TSLit [Integer]

Concrete shape, e.g., [2, 2]

TSVar String

Shape variable

TSMixed [ShapeDim]

Mixed shape, e.g., [n, m, 2]

data ShapeDim Source #

Shape dimension (can be concrete or variable)

Constructors

SDLit Integer

Concrete dimension, e.g., 2

SDVar String

Dimension variable, e.g., n

Instances

Instances details
Show ShapeDim Source # 
Instance details

Defined in Language.Egison.AST

Eq ShapeDim Source # 
Instance details

Defined in Language.Egison.AST

data TensorIndexExpr Source #

Tensor index expression

Constructors

TISub String

Subscript, e.g., _i

TISup String

Superscript, e.g., ~i

TIPlaceholderSub

Subscript placeholder, _#

TIPlaceholderSup

Superscript placeholder, ~#

data TypedParam Source #

Typed parameter pattern

Constructors

TPVar String TypeExpr

Simple variable with type: (x: a)

TPInvertedVar String TypeExpr

Inverted variable with type: (!x: a)

TPTuple [TypedParam]

Tuple pattern: ((x: a), (y: b)) or (x: a, y: b)

TPWildcard TypeExpr

Wildcard with type: (_: a)

TPUntypedVar String

Untyped variable in tuple: x (inferred)

TPUntypedWildcard

Untyped wildcard: _

Instances

Instances details
Show TypedParam Source # 
Instance details

Defined in Language.Egison.AST

Eq TypedParam Source # 
Instance details

Defined in Language.Egison.AST

Pretty TypedParam Source # 
Instance details

Defined in Language.Egison.Pretty

Methods

pretty :: TypedParam -> Doc ann #

prettyList :: [TypedParam] -> Doc ann #

data TypedVarWithIndices Source #

Variable with type annotation

Constructors

TypedVarWithIndices 

Fields

data InductiveConstructor Source #

Constructor for inductive data type e.g., Less, S Nat, Node Tree Tree

Constructors

InductiveConstructor 

Fields

data PatternConstructor Source #

Constructor for pattern inductive type e.g., myNil, myCons a (MyList a)

Constructors

PatternConstructor 

Fields

data ClassDecl Source #

Type class declaration e.g., class Eq a where ... class Eq a => Ord a where ...

Constructors

ClassDecl 

Fields

Instances

Instances details
Show ClassDecl Source # 
Instance details

Defined in Language.Egison.AST

data ClassMethod Source #

Type class method declaration e.g., (==) (x: a) (y: a) : Bool (/=) (x: a) (y: a) : Bool := not (x == y)

Constructors

ClassMethod 

Fields

Instances

Instances details
Show ClassMethod Source # 
Instance details

Defined in Language.Egison.AST

data InstanceDecl Source #

Type class instance declaration e.g., instance Eq Integer where ... instance Eq a => Eq [a] where ...

Constructors

InstanceDecl 

Fields

Instances

Instances details
Show InstanceDecl Source # 
Instance details

Defined in Language.Egison.AST

data InstanceMethod Source #

Instance method implementation e.g., (==) x y := x = y

Constructors

InstanceMethod 

Fields

Instances

Instances details
Show InstanceMethod Source # 
Instance details

Defined in Language.Egison.AST

data ConstraintExpr Source #

Type constraint expression e.g., Eq a, Ord a

Constructors

ConstraintExpr 

Fields

Instances

Instances details
Show ConstraintExpr Source # 
Instance details

Defined in Language.Egison.AST

Eq ConstraintExpr Source # 
Instance details

Defined in Language.Egison.AST

Pretty ConstraintExpr Source # 
Instance details

Defined in Language.Egison.Pretty

Methods

pretty :: ConstraintExpr -> Doc ann #

prettyList :: [ConstraintExpr] -> Doc ann #