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

Safe HaskellNone
LanguageHaskell2010

Agda.Syntax.Translation.AbstractToConcrete

Description

The translation of abstract syntax to concrete syntax has two purposes. First it allows us to pretty print abstract syntax values without having to write a dedicated pretty printer, and second it serves as a sanity check for the concrete to abstract translation: translating from concrete to abstract and then back again should be (more or less) the identity.

Synopsis

Documentation

class ToConcrete a c | a -> c where Source #

Methods

toConcrete :: a -> AbsToCon c Source #

bindToConcrete :: a -> (c -> AbsToCon b) -> AbsToCon b Source #

Instances

ToConcrete InteractionId Expr Source # 
ToConcrete ModuleName QName Source # 
ToConcrete QName QName Source # 
ToConcrete Name Name Source # 
ToConcrete Pattern Pattern Source # 
ToConcrete LHSCore Pattern Source # 
ToConcrete LHS LHS Source # 
ToConcrete SpineLHS LHS Source # 
ToConcrete TypedBinding TypedBinding Source # 
ToConcrete ModuleApplication ModuleApplication Source # 
ToConcrete Expr Expr Source # 
ToConcrete NamedMeta Expr Source # 
ToConcrete RangeAndPragma Pragma Source # 
ToConcrete TypedBindings [TypedBindings] Source # 
ToConcrete LamBinding [LamBinding] Source # 
ToConcrete LetBinding [Declaration] Source # 
ToConcrete Declaration [Declaration] Source # 
ToConcrete RHS (RHS, [Expr], [Expr], [Declaration]) Source # 
ToConcrete (Constr Constructor) Declaration Source # 
ToConcrete (DontTouchMe a) a Source # 
ToConcrete a c => ToConcrete [a] [c] Source # 

Methods

toConcrete :: [a] -> AbsToCon [c] Source #

bindToConcrete :: [a] -> ([c] -> AbsToCon b) -> AbsToCon b Source #

ToConcrete (Maybe QName) (Maybe Name) Source # 
ToConcrete a c => ToConcrete (Arg a) (Arg c) Source # 

Methods

toConcrete :: Arg a -> AbsToCon (Arg c) Source #

bindToConcrete :: Arg a -> (Arg c -> AbsToCon b) -> AbsToCon b Source #

ToConcrete a c => ToConcrete (WithHiding a) (WithHiding c) Source # 
ToConcrete a c => ToConcrete (FieldAssignment' a) (FieldAssignment' c) Source # 
ToConcrete a LHS => ToConcrete (Clause' a) [Declaration] Source # 
(ToConcrete a1 c1, ToConcrete a2 c2) => ToConcrete (Either a1 a2) (Either c1 c2) Source # 

Methods

toConcrete :: Either a1 a2 -> AbsToCon (Either c1 c2) Source #

bindToConcrete :: Either a1 a2 -> (Either c1 c2 -> AbsToCon b) -> AbsToCon b Source #

(ToConcrete a1 c1, ToConcrete a2 c2) => ToConcrete (a1, a2) (c1, c2) Source # 

Methods

toConcrete :: (a1, a2) -> AbsToCon (c1, c2) Source #

bindToConcrete :: (a1, a2) -> ((c1, c2) -> AbsToCon b) -> AbsToCon b Source #

ToConcrete a c => ToConcrete (Named name a) (Named name c) Source # 

Methods

toConcrete :: Named name a -> AbsToCon (Named name c) Source #

bindToConcrete :: Named name a -> (Named name c -> AbsToCon b) -> AbsToCon b Source #

(ToConcrete a c, ToConcrete b d) => ToConcrete (OutputConstraint' a b) (OutputConstraint' c d) Source # 
(ToConcrete a c, ToConcrete b d) => ToConcrete (OutputConstraint a b) (OutputConstraint c d) Source # 
(ToConcrete a c, ToConcrete b d) => ToConcrete (OutputForm a b) (OutputForm c d) Source # 
(ToConcrete a1 c1, ToConcrete a2 c2, ToConcrete a3 c3) => ToConcrete (a1, a2, a3) (c1, c2, c3) Source # 

Methods

toConcrete :: (a1, a2, a3) -> AbsToCon (c1, c2, c3) Source #

bindToConcrete :: (a1, a2, a3) -> ((c1, c2, c3) -> AbsToCon b) -> AbsToCon b Source #

toConcreteCtx :: ToConcrete a c => Precedence -> a -> AbsToCon c Source #

Translate something in a context of the given precedence.

type AbsToCon = ReaderT Env TCM Source #

We put the translation into TCM in order to print debug messages.

data Env Source #