1
------------------------------------------------------------------------
2
------------------------------------------------------------------------
4
{-# OPTIONS --universe-polymorphism #-}
7
module Data.Product.Record where
9
open import Data.Function
13
infixr 2 _×_ _-×-_ _-,-_
15
------------------------------------------------------------------------
17
record Σ {a b} (A : Set a) (B : A → Set b) : Set (a ⊔ b) where
25
_×_ : ∀ {a b} (A : Set a) (B : Set b) → Set (a ⊔ b)
28
------------------------------------------------------------------------
30
<_,_> : ∀ {a b c} {A : Set a} {B : A → Set b} {C : ∀ {x} → B x → Set c}
31
(f : (x : A) → B x) → ((x : A) → C (f x)) →
33
< f , g > x = (f x , g x)
36
{A : Set a} {B : Set b} {P : A → Set p} {Q : B → Set q} →
37
(f : A → B) → (∀ {x} → P x → Q (f x)) →
39
map f g = < f ∘ proj₁ , g ∘ proj₂ >
41
swap : ∀ {a b} {A : Set a} {B : Set b} → A × B → B × A
42
swap = < proj₂ , proj₁ >
44
_-×-_ : ∀ {a b i j} {A : Set a} {B : Set b} →
45
(A → B → Set i) → (A → B → Set j) → (A → B → Set _)
46
f -×- g = f -[ _×_ ]- g
48
_-,-_ : ∀ {a b c d} {A : Set a} {B : Set b} {C : Set c} {D : Set d} →
49
(A → B → C) → (A → B → D) → (A → B → C × D)
50
f -,- g = f -[ _,_ ]- g
52
curry : ∀ {a b c} {A : Set a} {B : A → Set b} {C : Σ A B → Set c} →
54
((x : A) → (y : B x) → C (x , y))
55
curry f x y = f (x , y)
57
uncurry : ∀ {a b c} {A : Set a} {B : A → Set b} {C : Σ A B → Set c} →
58
((x : A) → (y : B x) → C (x , y)) →
60
uncurry f p = f (proj₁ p) (proj₂ p)