less prototype, less bad code implementation of CCHM type theory
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

74 lines
1.4 KiB

{-# LANGUAGE DeriveDataTypeable #-}
module Presyntax.Presyntax where
import Data.Text (Text)
import Data.Data
data Plicity
= Im | Ex
deriving (Eq, Show, Ord, Data)
data Expr
= Var Text
| Hole
| App Plicity Expr Expr
| Pi Plicity Text Expr Expr
| Lam Plicity Text Expr
| Sigma Text Expr Expr
| Pair Expr Expr
| Proj1 Expr
| Proj2 Expr
| LamSystem [(Formula, Expr)]
| LamCase [(Pattern, Expr)]
| Let [LetItem] Expr
| Span Expr Posn Posn
deriving (Eq, Show, Ord)
data LetItem
= LetDecl { leIName :: Text, leIVal :: Expr }
| LetBind { leIName :: Text, leIVal :: Expr }
deriving (Eq, Show, Ord)
data Formula
= FIs1 Text
| FIs0 Text
| FAnd Formula Formula
| FOr Formula Formula
| FTop
| FBot
deriving (Eq, Show, Ord)
data Pattern
= PCon Text [Text]
| PCap Text
deriving (Eq, Show, Ord)
data Statement
= Decl [Text] Expr
| Defn Text Expr
| Builtin Text Text
| Postulate [(Text, Expr)]
| ReplNf Expr -- REPL eval
| ReplTy Expr -- REPL :t
| Data Text [(Text, Plicity, Expr)] Expr [(Posn, Posn, Constructor)]
| SpanSt Statement Posn Posn
deriving (Eq, Show, Ord)
data Constructor
= Point Text Expr
| Path Text [Text] Expr [(Formula, Expr)]
deriving (Eq, Show, Ord)
data Posn
= Posn { posnLine :: {-# UNPACK #-} !Int
, posnColm :: {-# UNPACK #-} !Int
}
deriving (Eq, Show, Ord)