|
|
- {-# LANGUAGE DeriveDataTypeable #-}
- {-# LANGUAGE GeneralizedNewtypeDeriving #-}
- {-# LANGUAGE PatternSynonyms #-}
- module Syntax where
-
- import Data.Text (Text)
- import Data.Data (Data, Typeable)
-
- data Plicity
- = Im
- | Ex
- deriving (Eq, Show, Ord, Data, Typeable)
-
- newtype Var = Bound Int
- deriving (Eq, Show, Ord, Data, Typeable)
-
- data BoundDef = BDBound Text | BDDefined Text
- deriving (Eq, Show, Ord, Data, Typeable)
-
- newtype MetaVar = MV { getMV :: Int }
- deriving (Eq, Show, Ord, Data, Typeable)
-
- data Term
- = Var Var
- | Con Text
- | Let Text Term Term Term
- | Type | Prop
-
- | Pi Plicity Text Term Term
- | Lam Plicity Text Term
- | App Plicity Term Term
-
- | Sigma Text Term Term
- | Pair Term Term
- | Proj1 Term
- | Proj2 Term
-
- | Meta MetaVar
- | NewMeta MetaVar [BoundDef]
-
- | Id Term Term Term
- | Refl
- | Coe
- | Cong
- | Sym
-
- | Top | Unit
- deriving (Eq, Show, Ord, Typeable, Data)
-
- pattern Bv :: Int -> Term
- pattern Bv i = Var (Bound i)
-
- data Telescope
- = End
- | Ext Telescope Text Term
- deriving (Eq, Show, Ord)
-
- newtype Level = Lvl {unLvl :: Int}
- deriving (Eq, Show, Ord, Enum)
-
- lvl2Ix :: Level -> Level -> Int
- lvl2Ix (Lvl l) (Lvl x) = l - x - 1
|