module Haskell.Prim.Tuple where
open import Haskell.Prim
infix 3 _×_ _×_×_
infix -1 _,_ _,_,_
record _×_ (a b : Set) : Set where
constructor _,_
field
fst : a
snd : b
open _×_ public
{-# COMPILE AGDA2HS _×_ tuple #-}
record _×_×_ (a b c : Set) : Set where
no-eta-equality; pattern
constructor _,_,_
field
fst3 : a
snd3 : b
thd3 : c
{-# COMPILE AGDA2HS _×_×_ tuple #-}
uncurry : (a → b → c) → a × b → c
uncurry f (x , y) = f x y
curry : (a × b → c) → a → b → c
curry f x y = f (x , y)
first : (a → b) → a × c → b × c
first f (x , y) = f x , y
second : (a → b) → c × a → c × b
second f (x , y) = x , f y
_***_ : (a → b) → (c → d) → a × c → b × d
(f *** g) (x , y) = f x , g y