lambda-cube-0.3.0.0: src/LambdaCube/SystemFw/Ast.hs
module LambdaCube.SystemFw.Ast where
import Data.Data (Data)
import Data.Text (Text)
import Language.Haskell.TH.Syntax (Lift)
data ExtLCTerm
= ExtLCVar Text
| ExtLCLam Text ExtLCType ExtLCTerm
| ExtLCApp ExtLCTerm ExtLCTerm
| ExtLCTLam Text ExtLCKind ExtLCTerm
| ExtLCTApp ExtLCTerm ExtLCType
| ExtLCMVar String
deriving stock (Eq, Show, Data, Lift)
infixl 6 `ExtLCApp`
infixl 6 `ExtLCTApp`
data ExtLCType
= ExtLCBase
| ExtLCTVar Text
| ExtLCArr ExtLCType ExtLCType
| ExtLCUniv Text ExtLCKind ExtLCType
| ExtLCTTLam Text ExtLCKind ExtLCType
| ExtLCTTApp ExtLCType ExtLCType
| ExtLCMTVar String
deriving stock (Eq, Show, Data, Lift)
infixr 5 `ExtLCArr`
infixl 6 `ExtLCTTApp`
data ExtLCKind
= ExtLCStar
| ExtLCKArr ExtLCKind ExtLCKind
| ExtLCMKVar String
deriving stock (Eq, Show, Data, Lift)
infixr 5 `ExtLCKArr`
data LCTerm
= LCVar Int
| LCLam LCType LCTerm
| LCApp LCTerm LCTerm
| LCTLam LCKind LCTerm
| LCTApp LCTerm LCType
deriving stock (Eq, Show, Data, Lift)
infixl 6 `LCApp`
infixl 6 `LCTApp`
data LCType
= LCBase
| LCTVar Int
| LCArr LCType LCType
| LCUniv LCKind LCType
| LCTTLam LCKind LCType
| LCTTApp LCType LCType
deriving stock (Eq, Show, Data, Lift)
infixr 5 `LCArr`
infixl 6 `LCTTApp`
data LCKind
= LCStar
| LCKArr LCKind LCKind
deriving stock (Eq, Show, Data, Lift)
infixr 5 `LCKArr`
data LCValue
= LCValLam LCType LCTerm
| LCValTLam LCKind LCTerm
deriving stock (Eq, Show, Data, Lift)
data LCNormalTerm
= LCNormLam LCType LCNormalTerm
| LCNormTLam LCKind LCNormalTerm
| LCNormNeut LCNeutralTerm
deriving stock (Eq, Show, Data, Lift)
data LCNeutralTerm
= LCNeutVar Int
| LCNeutApp LCNeutralTerm LCNormalTerm
| LCNeutTApp LCNeutralTerm LCType
deriving stock (Eq, Show, Data, Lift)
infixl 6 `LCNeutApp`
infixl 6 `LCNeutTApp`