{-# 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)