open import FRP.JS.RSet using ( RSet ; ⟦_⟧ ; _⇒_ )
open import FRP.JS.Time using ( Time )

module FRP.JS.Product where

-- We define _∧_ directly, rather than as λ t → (A t × B t)
-- in order to make _∧_ invertable. (If we used the obvious defn,
-- (A ∧ B) would only be invertable if A and B were invertable.

infixr 2 _∧_
infixr 4 _,_

data _∧_ (A B : RSet) (t : Time) : Set where
  _,_ : A t  B t  (A  B) t

proj₁ :  {A B}   A  B  A 
proj₁ (a , b) = a

proj₂ :  {A B}   A  B  B 
proj₂ (a , b) = b

swap :  {A B}    A  B  B  A 
swap (a , b) = (b , a)