    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