Agda-2.6.1.3: A dependently typed functional programming language and proof assistant
Safe HaskellNone
LanguageHaskell2010

Agda.TypeChecking.DisplayForm

Description

Tools for DisplayTerm and DisplayForm.

Synopsis

Documentation

displayFormArities :: (HasConstInfo m, ReadTCState m) => QName -> m [Int] Source #

Get the arities of all display forms for a name.

displayForm :: MonadDisplayForm m => QName -> Elims -> m (Maybe DisplayTerm) Source #

Find a matching display form for q es. In essence this tries to rewrite q es with any display form q ps --> dt and returns the instantiated dt if successful. First match wins.

matchDisplayForm :: MonadDisplayForm m => DisplayForm -> Elims -> MaybeT m (DisplayForm, DisplayTerm) Source #

Match a DisplayForm q ps = v against q es. Return the DisplayTerm v[us] if the match was successful, i.e., es / ps = Just us.

class Match a where Source #

Class Match for matching a term p in the role of a pattern against a term v.

The 0th variable in p plays the role of a place holder (pattern variable). Each occurrence of var 0 in p stands for a different pattern variable.

The result of matching, if successful, is a list of solutions for the pattern variables, in left-to-right order.

The 0th variable is in scope in the input v, but should not actually occur! In the output solution, the 0th variable is no longer in scope. (It has been substituted by IMPOSSIBLE which corresponds to a raise by -1).

Methods

match :: MonadDisplayForm m => a -> a -> MaybeT m [WithOrigin Term] Source #

Instances

Instances details
Match Level Source # 
Instance details

Defined in Agda.TypeChecking.DisplayForm

Methods

match :: forall (m :: Type -> Type). MonadDisplayForm m => Level -> Level -> MaybeT m [WithOrigin Term] Source #

Match Sort Source # 
Instance details

Defined in Agda.TypeChecking.DisplayForm

Methods

match :: forall (m :: Type -> Type). MonadDisplayForm m => Sort -> Sort -> MaybeT m [WithOrigin Term] Source #

Match Term Source # 
Instance details

Defined in Agda.TypeChecking.DisplayForm

Methods

match :: forall (m :: Type -> Type). MonadDisplayForm m => Term -> Term -> MaybeT m [WithOrigin Term] Source #

Match a => Match [a] Source # 
Instance details

Defined in Agda.TypeChecking.DisplayForm

Methods

match :: forall (m :: Type -> Type). MonadDisplayForm m => [a] -> [a] -> MaybeT m [WithOrigin Term] Source #

Match a => Match (Arg a) Source # 
Instance details

Defined in Agda.TypeChecking.DisplayForm

Methods

match :: forall (m :: Type -> Type). MonadDisplayForm m => Arg a -> Arg a -> MaybeT m [WithOrigin Term] Source #

Match a => Match (Elim' a) Source # 
Instance details

Defined in Agda.TypeChecking.DisplayForm

Methods

match :: forall (m :: Type -> Type). MonadDisplayForm m => Elim' a -> Elim' a -> MaybeT m [WithOrigin Term] Source #

class SubstWithOrigin a where Source #

Substitute terms with origin into display terms, replacing variables along with their origins.

The purpose is to replace the pattern variables in a with-display form, and only on the top level of the lhs. Thus, we are happy to fall back to ordinary substitution where it does not matter. This fixes issue #2590.