1
{-# OPTIONS --type-in-type #-}
3
module PatternSynonymsErrorLocation where
5
data _≡_ {A : Set}(a : A) : A -> Set where
10
record Unit : Set where
12
data Sigma (A : Set)(B : A -> Set) : Set where
13
_,_ : (fst : A) -> B fst -> Sigma A B
15
Prod : (A B : Set) -> Set
16
Prod A B = Sigma A \ _ -> B
18
data Empty : Set where
20
data ListTag : Set where nil cons : ListTag
22
{-# NO_TERMINATION_CHECK #-}
23
List : (A : Set) -> Set
24
List A = Sigma ListTag T where
27
T cons = Sigma A \ _ -> List A
32
pattern _∷_ x xs = cons , x , xs
34
data TyTag : Set where base arr : TyTag
36
{-# NO_TERMINATION_CHECK #-}
38
Ty = Sigma TyTag T where
41
T arr = Sigma Ty \ _ -> Ty -- Prod Ty Ty
46
pattern _⇒_ A B = arr , A , B
50
data NatTag : Set where zero succ : NatTag
52
Var : (Gamma : Context)(C : Ty) -> Set
54
Var (cons , A , Gamma) C = Sigma NatTag T
55
where T : NatTag -> Set
59
pattern vz = zero , refl
60
pattern vs x = succ , x
62
idVar : (Gamma : Context)(C : Ty)(x : Var Gamma C) -> Var Gamma C
64
idVar (A ∷ Gamma) C vz = vz
65
idVar (A ∷ Gamma) C (vs x) = vs (idVar Gamma C x)