Agda-2.4.2: A dependently typed functional programming language and proof assistant

Safe HaskellNone

Agda.Syntax.Abstract

Contents

Description

The abstract syntax. This is what you get after desugaring and scope analysis of the concrete syntax. The type checker works on abstract syntax, producing internal syntax (Agda.Syntax.Internal).

Synopsis

Documentation

type Arg a = Arg Color aSource

type Dom a = Dom Color aSource

data Expr Source

Constructors

Var Name

Bound variables

Def QName

Constants (i.e. axioms, functions, projections, and datatypes)

Con AmbiguousQName

Constructors

Lit Literal

Literals

QuestionMark MetaInfo InteractionId

Meta variable for interaction. The InteractionId is usually identical with the metaNumber of MetaInfo. However, if you want to print an interaction meta as just ? instead of ?n, you should set the metaNumber to Nothing while keeping the InteractionId.

Underscore MetaInfo

Meta variable for hidden argument (must be inferred locally).

App ExprInfo Expr (NamedArg Expr) 
WithApp ExprInfo Expr [Expr]

with application

Lam ExprInfo LamBinding Expr 
AbsurdLam ExprInfo Hiding 
ExtendedLam ExprInfo DefInfo QName [Clause] 
Pi ExprInfo Telescope Expr 
Fun ExprInfo (Arg Expr) Expr

independent function space

Set ExprInfo Integer

Set, Set1, Set2, ...

Prop ExprInfo 
Let ExprInfo [LetBinding] Expr 
ETel Telescope

only used when printing telescopes

Rec ExprInfo Assigns

record construction

RecUpdate ExprInfo Expr Assigns

record update

ScopedExpr ScopeInfo Expr

scope annotation

QuoteGoal ExprInfo Name Expr

binds Name to current type in Expr

QuoteContext ExprInfo Name Expr

binds Name to current context in Expr

Quote ExprInfo

Quote an identifier QName.

QuoteTerm ExprInfo

Quote a term.

Unquote ExprInfo

The splicing construct: unquote ...

DontCare Expr

for printing DontCare from Syntax.Internal

PatternSyn QName 

type Assign = (Name, Expr)Source

Record field assignment f = e.

data Axiom Source

Is a type signature a postulate or a function signature?

Constructors

FunSig

A function signature.

NoFunSig

Not a function signature, i.e., a postulate (in user input) or another (e.g. data/record) type signature (internally).

Instances

Eq Axiom 
Ord Axiom 
Show Axiom 
Typeable Axiom 

type Ren a = Map a aSource

data Declaration Source

Constructors

Axiom Axiom DefInfo ArgInfo QName Expr

type signature (can be irrelevant and colored, but not hidden)

Field DefInfo QName (Arg Expr)

record field

Primitive DefInfo QName Expr

primitive function

Mutual MutualInfo [Declaration]

a bunch of mutually recursive definitions

Section ModuleInfo ModuleName [TypedBindings] [Declaration] 
Apply ModuleInfo ModuleName ModuleApplication (Ren QName) (Ren ModuleName) 
Import ModuleInfo ModuleName 
Pragma Range Pragma 
Open ModuleInfo ModuleName

only retained for highlighting purposes

FunDef DefInfo QName Delayed [Clause]

sequence of function clauses

DataSig DefInfo QName Telescope Expr

lone data signature ^ the LamBindings are DomainFree and binds the parameters of the datatype.

DataDef DefInfo QName [LamBinding] [Constructor]

the LamBindings are DomainFree and binds the parameters of the datatype.

RecSig DefInfo QName Telescope Expr

lone record signature

RecDef DefInfo QName (Maybe (Ranged Induction)) (Maybe QName) [LamBinding] Expr [Declaration]

The Expr gives the constructor type telescope, (x1 : A1)..(xn : An) -> Prop, and the optional name is the constructor's name.

PatternSynDef QName [Arg Name] Pattern

Only for highlighting purposes

UnquoteDecl MutualInfo DefInfo QName Expr 
ScopedDecl ScopeInfo [Declaration]

scope annotation

class GetDefInfo a whereSource

Methods

getDefInfo :: a -> Maybe DefInfoSource

data LetBinding Source

Bindings that are valid in a let.

Constructors

LetBind LetInfo ArgInfo Name Expr Expr
LetBind info rel name type defn
LetPatBind LetInfo Pattern Expr

Irrefutable pattern binding.

LetApply ModuleInfo ModuleName ModuleApplication (Ren QName) (Ren ModuleName)

LetApply mi newM (oldM args) renaming moduleRenaming.

LetOpen ModuleInfo ModuleName

only for highlighting and abstractToConcrete

data LamBinding Source

A lambda binding is either domain free or typed.

Constructors

DomainFree ArgInfo Name

. x or {x} or .x or .{x}

DomainFull TypedBindings

. (xs:e) or {xs:e} or (let Ds)

data TypedBinding Source

A typed binding. Appears in dependent function spaces, typed lambdas, and telescopes. I might be tempting to simplify this to only bind a single name at a time. This would mean that we would have to typecheck the type several times ((x y : A) vs. (x : A)(y : A)). In most cases this wouldn't really be a problem, but it's good principle to not do extra work unless you have to.

(Andreas, 2013-12-10: The more serious problem would that the translation from (x y : ?) to (x : ?) (y : ?) duplicates the hole ?.

Constructors

TBind Range [Name] Expr

As in telescope (x y z : A) or type (x y z : A) -> B.

TLet Range [LetBinding] 

data Clause' lhs Source

We could throw away where clauses at this point and translate them to let. It's not obvious how to remember that the let was really a where clause though, so for the time being we keep it here.

Constructors

Clause 

Instances

Functor Clause' 
Typeable1 Clause' 
Foldable Clause' 
Traversable Clause' 
LHSToSpine Clause SpineClause

Clause instance.

ToAbstract Clause Clause 
Reify NamedClause Clause 
Show lhs => Show (Clause' lhs) 
KillRange a => KillRange (Clause' a) 
HasRange a => HasRange (Clause' a) 
ExprLike (Clause' a)

TODO: currently does not go into clauses.

ToConcrete a LHS => ToConcrete (Clause' a) [Declaration] 

data RHS Source

Constructors

RHS Expr 
AbsurdRHS 
WithRHS QName [Expr] [Clause]

The QName is the name of the with function.

RewriteRHS [QName] [Expr] RHS [Declaration]

The QNames are the names of the generated with functions. One for each Expr. The RHS shouldn't be another RewriteRHS

data SpineLHS Source

The lhs of a clause in spine view (inside-out). Projection patterns are contained in spLhsPats, represented as DefP d [].

Constructors

SpineLHS 

Fields

spLhsInfo :: LHSInfo

Range.

spLhsDefName :: QName

Name of function we are defining.

spLhsPats :: [NamedArg Pattern]

Function parameters (patterns).

spLhsWithPats :: [Pattern]

with patterns (after |).

data LHS Source

The lhs of a clause in focused (projection-application) view (outside-in). Projection patters are represented as LHSProjs.

Constructors

LHS 

Fields

lhsInfo :: LHSInfo

Range.

lhsCore :: LHSCore

Copatterns.

lhsWithPats :: [Pattern]

with patterns (after |).

data LHSCore' e Source

The lhs minus with-patterns in projection-application view. Parameterised over the type e of dot patterns.

Constructors

LHSHead

The head applied to ordinary patterns.

Fields

lhsDefName :: QName

Head f.

lhsPats :: [NamedArg (Pattern' e)]

Applied to patterns ps.

LHSProj

Projection

Fields

lhsDestructor :: QName

Record projection identifier.

lhsPatsLeft :: [NamedArg (Pattern' e)]

Indices of the projection. Currently none [], since we do not have indexed records.

lhsFocus :: NamedArg (LHSCore' e)

Main branch.

lhsPatsRight :: [NamedArg (Pattern' e)]

Further applied to patterns.

Instances

Functor LHSCore' 
Typeable1 LHSCore' 
Foldable LHSCore' 
Traversable LHSCore' 
ToConcrete LHSCore Pattern 
ToAbstract LHSCore (LHSCore' Expr) 
Eq (LHSCore' e) 
Show e => Show (LHSCore' e) 
KillRange e => KillRange (LHSCore' e) 
HasRange (LHSCore' e) 
ToAbstract (LHSCore' Expr) (LHSCore' Expr) 

class LHSToSpine a b whereSource

Convert a focused lhs to spine view and back.

Methods

lhsToSpine :: a -> bSource

spineToLhs :: b -> aSource

Instances

LHSToSpine LHS SpineLHS

LHS instance.

LHSToSpine Clause SpineClause

Clause instance.

LHSToSpine a b => LHSToSpine [a] [b]

List instance (for clauses).

lhsCoreApp :: LHSCore' e -> [NamedArg (Pattern' e)] -> LHSCore' eSource

Add applicative patterns (non-projection patterns) to the right.

lhsCoreAddSpine :: LHSCore' e -> [NamedArg (Pattern' e)] -> LHSCore' eSource

Add projection and applicative patterns to the right.

lhsCoreAllPatterns :: LHSCore' e -> [Pattern' e]Source

Used for checking pattern linearity.

lhsCoreToPattern :: LHSCore -> PatternSource

Used in AbstractToConcrete.

Patterns

data Pattern' e Source

Parameterised over the type of dot patterns.

Constructors

VarP Name 
ConP ConPatInfo AmbiguousQName [NamedArg (Pattern' e)] 
DefP PatInfo QName [NamedArg (Pattern' e)]

Defined pattern: function definition f ps or destructor pattern d p ps.

WildP PatInfo

Underscore pattern entered by user.

AsP PatInfo Name (Pattern' e) 
DotP PatInfo e 
AbsurdP PatInfo 
LitP Literal 
ImplicitP PatInfo

Generated at type checking for implicit arguments.

PatternSynP PatInfo QName [NamedArg (Pattern' e)] 

Instances

Functor Pattern' 
Typeable1 Pattern' 
Foldable Pattern' 
Traversable Pattern' 
EmbPrj Pattern 
ExpandPatternSynonyms Pattern 
UniverseBi Declaration Pattern 
ToConcrete Pattern Pattern 
ToAbstract Pattern (Pattern' Expr) 
Eq (Pattern' e)

Literal equality of patterns, ignoring dot patterns

Show e => Show (Pattern' e) 
KillRange e => KillRange (Pattern' e) 
SetRange (Pattern' a) 
HasRange (Pattern' e) 
IsProjP (Pattern' e) 
ExprLike (Pattern' a)

TODO: currently does not go into patterns.

ToAbstract (Pattern' Expr) (Pattern' Expr) 

class IsProjP a whereSource

Check whether we are a projection pattern.

Methods

isProjP :: a -> Maybe QNameSource

Instances

allNames :: Declaration -> Seq QNameSource

Extracts all the names which are declared in a Declaration. This does not include open public or let expressions, but it does include local modules, where clauses and the names of extended lambdas.

axiomName :: Declaration -> QNameSource

The name defined by the given axiom.

Precondition: The declaration has to be a (scoped) Axiom.

class AnyAbstract a whereSource

Are we in an abstract block?

In that case some definition is abstract.

Methods

anyAbstract :: a -> BoolSource

insertImplicitPatSynArgs :: HasRange a => (Range -> a) -> Range -> [Arg Name] -> [NamedArg a] -> Maybe ([(Name, a)], [Arg Name])Source