module UU.Util.Utils where

newtype Id x = Id x

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

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

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

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

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