{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-warn-missing-import-lists #-}
module Tuple4(mapFst4, mapSnd4, mapThd4, mapFrt4, mapAll4, mapEach4, mapFstF4, mapSndF4, mapThdF4, mapFrtF4, tuple4To5a, tuple4To5b, tuple4To5c, tuple4To5d, tuple4To5e, curry4, uncurry4, fst4, snd4, thd4, frt4) where

import External

(<&>) :: Functor f => f a -> (a -> b) -> f b
(<&>) = flip fmap

mapFst4 :: (a -> x) -> (a, b, c, d) -> (x, b, c, d)
mapFst4 f (a, b, c, d) = (f a, b, c, d)

mapSnd4 :: (b -> x) -> (a, b, c, d) -> (a, x, c, d)
mapSnd4 f (a, b, c, d) = (a, f b, c, d)

mapThd4 :: (c -> x) -> (a, b, c, d) -> (a, b, x, d)
mapThd4 f (a, b, c, d) = (a, b, f c, d)

mapFrt4 :: (d -> x) -> (a, b, c, d) -> (a, b, c, x)
mapFrt4 f (a, b, c, d) = (a, b, c, f d)

mapAll4 :: (a -> x) -> (a, a, a, a) -> (x, x, x, x)
mapAll4 f (a, b, c, d) = (f a, f b, f c, f d)

mapEach4 :: (a -> x) -> (b -> y) -> (c -> z) -> (d -> l) -> (a, b, c, d) -> (x, y, z, l)
mapEach4 f g h i (a, b, c, d) = (f a, g b, h c, i d)

mapFstF4 :: Functor f => (a -> f x) -> (a, b, c, d) -> f (x, b, c, d)
mapFstF4 f (a, b, c, d) = (f a) <&> (\x -> (x, b, c, d))

mapSndF4 :: Functor f => (b -> f x) -> (a, b, c, d) -> f (a, x, c, d)
mapSndF4 f (a, b, c, d) = (f b) <&> (\x -> (a, x, c, d))

mapThdF4 :: Functor f => (c -> f x) -> (a, b, c, d) -> f (a, b, x, d)
mapThdF4 f (a, b, c, d) = (f c) <&> (\x -> (a, b, x, d))

mapFrtF4 :: Functor f => (d -> f x) -> (a, b, c, d) -> f (a, b, c, x)
mapFrtF4 f (a, b, c, d) = (f d) <&> (\x -> (a, b, c, x))

tuple4To5a :: (a, b, c, d) -> x -> (x, a, b, c, d)
tuple4To5a (a, b, c, d) x = (x, a, b, c, d)

tuple4To5b :: (a, b, c, d) -> x -> (a, x, b, c, d)
tuple4To5b (a, b, c, d) x = (a, x, b, c, d)

tuple4To5c :: (a, b, c, d) -> x -> (a, b, x, c, d)
tuple4To5c (a, b, c, d) x = (a, b, x, c, d)

tuple4To5d :: (a, b, c, d) -> x -> (a, b, c, x, d)
tuple4To5d (a, b, c, d) x = (a, b, c, x, d)

tuple4To5e :: (a, b, c, d) -> x -> (a, b, c, d, x)
tuple4To5e (a, b, c, d) x = (a, b, c, d, x)

curry4 :: ((a, b, c, d) -> x) -> a -> b -> c -> d -> x
curry4 f a b c d = f (a, b, c, d)

uncurry4 :: (a -> b -> c -> d -> x) -> ((a, b, c, d) -> x)
uncurry4 f (a, b, c, d) = f a b c d

fst4 :: (a, b, c, d) -> a
fst4 (a, _, _, _) = a

snd4 :: (a, b, c, d) -> b
snd4 (_, b, _, _) = b

thd4 :: (a, b, c, d) -> c
thd4 (_, _, c, _) = c

frt4 :: (a, b, c, d) -> d
frt4 (_, _, _, d) = d