{-# LANGUAGE NoImplicitPrelude #-} {-# OPTIONS_GHC -fno-warn-missing-import-lists #-} module Tuple3(mapFst3, mapSnd3, mapThd3, mapAll3, mapEach3, mapFstF3, mapSndF3, mapThdF3, tuple3To4a, tuple3To4b, tuple3To4c, tuple3To4d, curry3, uncurry3, fst3, snd3, thd3) where import External (<&>) :: Functor f => f a -> (a -> b) -> f b (<&>) = flip fmap mapFst3 :: (a -> x) -> (a, b, c) -> (x, b, c) mapFst3 f (a, b, c) = (f a, b, c) mapSnd3 :: (b -> x) -> (a, b, c) -> (a, x, c) mapSnd3 f (a, b, c) = (a, f b, c) mapThd3 :: (c -> x) -> (a, b, c) -> (a, b, x) mapThd3 f (a, b, c) = (a, b, f c) mapAll3 :: (a -> x) -> (a, a, a) -> (x, x, x) mapAll3 f (a, b, c) = (f a, f b, f c) mapEach3 :: (a -> x) -> (b -> y) -> (c -> z) -> (a, b, c) -> (x, y, z) mapEach3 f g h (a, b, c) = (f a, g b, h c) mapFstF3 :: Functor f => (a -> f x) -> (a, b, c) -> f (x, b, c) mapFstF3 f (a, b, c) = (f a) <&> (\x -> (x, b, c)) mapSndF3 :: Functor f => (b -> f x) -> (a, b, c) -> f (a, x, c) mapSndF3 f (a, b, c) = (f b) <&> (\x -> (a, x, c)) mapThdF3 :: Functor f => (c -> f x) -> (a, b, c) -> f (a, b, x) mapThdF3 f (a, b, c) = (f c) <&> (\x -> (a, b, x)) tuple3To4a :: (a, b, c) -> x -> (x, a, b, c) tuple3To4a (a, b, c) x = (x, a, b, c) tuple3To4b :: (a, b, c) -> x -> (a, x, b, c) tuple3To4b (a, b, c) x = (a, x, b, c) tuple3To4c :: (a, b, c) -> x -> (a, b, x, c) tuple3To4c (a, b, c) x = (a, b, x, c) tuple3To4d :: (a, b, c) -> x -> (a, b, c, x) tuple3To4d (a, b, c) x = (a, b, c, x) curry3 :: ((a, b, c) -> x) -> a -> b -> c -> x curry3 f a b c = f (a, b, c) uncurry3 :: (a -> b -> c -> x) -> ((a, b, c) -> x) uncurry3 f (a, b, c) = f a b c fst3 :: (a, b, c) -> a fst3 (a, _, _) = a snd3 :: (a, b, c) -> b snd3 (_, b, _) = b thd3 :: (a, b, c) -> c thd3 (_, _, c) = c