1
module RecordPatternMatching where
4
record Σ (A : Set) (B : A → Set) : Set where
16
curry : ∀ {A : Set} {B : A → Set} {C : Σ A B → Set} →
18
((x : A) → (y : B x) → C (x , y))
19
curry f x y = f (x , y)
21
uncurry : ∀ {A : Set} {B : A → Set} {C : Σ A B → Set} →
22
((x : A) → (y : B x) → C (x , y)) →
24
uncurry f (x , y) = f x y
27
data _≡_ {A : Set} (x : A) : A → Set where
30
curry∘uncurry : ∀ {A : Set} {B : A → Set} {C : Σ A B → Set} →
31
(f : (x : A) → (y : B x) → C (x , y)) →
33
curry {C = C} (uncurry f) x y ≡ f x y
34
curry∘uncurry f x y = refl
36
uncurry∘curry : ∀ {A : Set} {B : A → Set} {C : Σ A B → Set} →
37
(f : (p : Σ A B) → C p) →
39
uncurry {C = C} (curry f) p ≡ f p
40
uncurry∘curry f p = refl
43
to : {A B C : Set} → A × (B × C) → (A × B) × C
44
to (x , (y , z)) = ((x , y) , z)
46
from : {A B C : Set} → (A × B) × C → A × (B × C)
47
from ((x , y) , z) = (x , (y , z))
49
from∘to : {A B C : Set} (p : A × (B × C)) → from (to p) ≡ p
65
bar : ∀ p → F (foo p) → F (foo p)
66
bar (true , true) = λ b → b
67
bar (true , false) = λ ()
70
baz : (Σ Bool λ _ → Σ Bool λ _ → Bool) → Bool
71
baz (true , (b , c)) = b
72
baz (false , (b , c)) = c
74
lemma : ∀ p → baz (false , p) ≡ proj₂ p
83
add (suc m , n) = suc (add (m , n))
96
data P : ⊥ → ⊥ → Set where
99
Bar : (x : ⊥) → P x x → P x x → Set₁
100
Bar .x _ (p x .x) = Set
103
G : (Σ ⊥ λ x → Σ ⊥ λ y → x ≡ y) → Set₁
104
G (x , (.x , refl)) = Set
107
Foo : (p₁ p₂ : B) → proj₁ p₁ ≡ proj₁ p₂ → Unit
108
Foo (x , y) (.x , y′) refl = unit
110
Foo-eval : (p : B) → Foo p p refl ≡ unit
114
D : (p₁ p₂ : B) → proj₁ p₁ ≡ proj₁ p₂ → Set₁
115
D (x , y) (.x , unit) refl = Set