module UU.Util.Utils where

newtype Id x = Id x

cross :: (a->c) -> (b->d) -> (a,b) -> (c,d)
cross :: forall a c b d. (a -> c) -> (b -> d) -> (a, b) -> (c, d)
cross a -> c
f b -> d
g (a
x,b
y) = (a -> c
f a
x, b -> d
g b
y)

split :: (a->b) -> (a->c) -> a -> (b,c)
split :: forall a b c. (a -> b) -> (a -> c) -> a -> (b, c)
split a -> b
f a -> c
g a
x = (a -> b
f a
x,a -> c
g a
x)

fst3 :: (a,b,c) -> a
fst3 :: forall a b c. (a, b, c) -> a
fst3 (a
a,b
_,c
_) = a
a

snd3 :: (a,b,c) -> b
snd3 :: forall a b c. (a, b, c) -> b
snd3 (a
_,b
b,c
_) = b
b

thd3 :: (a,b,c) -> c
thd3 :: forall a b c. (a, b, c) -> c
thd3 (a
_,b
_,c
c) = c
c