Agda-2.8.0: src/full/Agda/Syntax/Reflected.hs
{-# OPTIONS_GHC -fwarn-missing-signatures #-}
module Agda.Syntax.Reflected where
import Data.Text (Text)
import Agda.Syntax.Common
import Agda.Syntax.Literal
import Agda.Syntax.Abstract.Name
import Agda.Syntax.Internal (Dom)
import Agda.Utils.List1 (List1, pattern (:|))
import qualified Agda.Utils.List1 as List1
type Args = [Arg Term]
data Elim' a = Apply (Arg a) -- no record projections for now
deriving (Show)
type Elim = Elim' Term
type Elims = [Elim]
argsToElims :: Args -> Elims
argsToElims = map Apply
data Abs a = Abs String a
deriving (Show)
data Term = Var Int Elims
| Con QName Elims
| Def QName Elims
| Meta MetaId Elims
| Lam Hiding (Abs Term)
| ExtLam (List1 Clause) Elims
| Pi (Dom Type) (Abs Type)
| Sort Sort
| Lit Literal
| Unknown
deriving (Show)
type Type = Term
data Sort = SetS Term
| LitS Integer
| PropS Term
| PropLitS Integer
| InfS Integer
| UnknownS
deriving (Show)
data Pattern = ConP QName [Arg Pattern]
| DotP Term
| VarP Int
| LitP Literal
| AbsurdP Int
| ProjP QName
deriving (Show)
data Clause
= Clause
{ clauseTel :: [(Text, Arg Type)]
, clausePats :: [Arg Pattern]
, clauseRHS :: Term
}
| AbsurdClause
{ clauseTel :: [(Text, Arg Type)]
, clausePats :: [Arg Pattern]
}
deriving (Show)
data Definition = FunDef Type [Clause]
| DataDef -- nothing for now
| RecordDef -- nothing for now
| DataConstructor
| Axiom
| Primitive
deriving (Show)