{-# OPTIONS_GHC -Wall -fno-warn-tabs #-}

module Data.Tuple.ToolsYj (
	uncurry3, uncurryDup,
	mapTup3, appTup3, mapTup3M, appTup3M, mapTup3M_, appTup3M_
	) where

import Control.Monad

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

uncurryDup :: (a -> b -> c -> d) -> ((a, b), c) -> d
uncurryDup :: forall a b c d. (a -> b -> c -> d) -> ((a, b), c) -> d
uncurryDup = ((a, b) -> c -> d) -> ((a, b), c) -> d
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry (((a, b) -> c -> d) -> ((a, b), c) -> d)
-> ((a -> b -> c -> d) -> (a, b) -> c -> d)
-> (a -> b -> c -> d)
-> ((a, b), c)
-> d
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> b -> c -> d) -> (a, b) -> c -> d
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry

mapTup3 :: (a -> b) -> (a, a, a) -> (b, b, b)
mapTup3 :: forall a b. (a -> b) -> (a, a, a) -> (b, b, b)
mapTup3 a -> b
f = (a -> b) -> (a -> b) -> (a -> b) -> (a, a, a) -> (b, b, b)
forall a b c d e f.
(a -> b) -> (c -> d) -> (e -> f) -> (a, c, e) -> (b, d, f)
appTup3 a -> b
f a -> b
f a -> b
f

appTup3 :: (a -> b) -> (c -> d) -> (e -> f) -> (a, c, e) -> (b, d, f)
appTup3 :: forall a b c d e f.
(a -> b) -> (c -> d) -> (e -> f) -> (a, c, e) -> (b, d, f)
appTup3 a -> b
f c -> d
g e -> f
h (a
x, c
y, e
z) = (a -> b
f a
x, c -> d
g c
y, e -> f
h e
z)

mapTup3M :: Applicative m => (a -> m b) -> (a, a, a) -> m (b, b, b)
mapTup3M :: forall (m :: * -> *) a b.
Applicative m =>
(a -> m b) -> (a, a, a) -> m (b, b, b)
mapTup3M a -> m b
f = (a -> m b) -> (a -> m b) -> (a -> m b) -> (a, a, a) -> m (b, b, b)
forall (m :: * -> *) a b c d e f.
Applicative m =>
(a -> m b) -> (c -> m d) -> (e -> m f) -> (a, c, e) -> m (b, d, f)
appTup3M a -> m b
f a -> m b
f a -> m b
f

appTup3M :: Applicative m =>
	(a -> m b) -> (c -> m d) -> (e -> m f) -> (a, c, e) -> m (b, d, f)
appTup3M :: forall (m :: * -> *) a b c d e f.
Applicative m =>
(a -> m b) -> (c -> m d) -> (e -> m f) -> (a, c, e) -> m (b, d, f)
appTup3M a -> m b
f c -> m d
g e -> m f
h (a
x, c
y, e
z) = (,,) (b -> d -> f -> (b, d, f)) -> m b -> m (d -> f -> (b, d, f))
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> a -> m b
f a
x m (d -> f -> (b, d, f)) -> m d -> m (f -> (b, d, f))
forall a b. m (a -> b) -> m a -> m b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> c -> m d
g c
y m (f -> (b, d, f)) -> m f -> m (b, d, f)
forall a b. m (a -> b) -> m a -> m b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> e -> m f
h e
z

mapTup3M_ :: Applicative m => (a -> m b) -> (a, a, a) -> m ()
mapTup3M_ :: forall (m :: * -> *) a b.
Applicative m =>
(a -> m b) -> (a, a, a) -> m ()
mapTup3M_ a -> m b
f = m (b, b, b) -> m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (m (b, b, b) -> m ())
-> ((a, a, a) -> m (b, b, b)) -> (a, a, a) -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> m b) -> (a, a, a) -> m (b, b, b)
forall (m :: * -> *) a b.
Applicative m =>
(a -> m b) -> (a, a, a) -> m (b, b, b)
mapTup3M a -> m b
f

appTup3M_ :: Applicative m =>
	(a -> m b) -> (c -> m d) -> (e -> m f) -> (a, c, e) -> m ()
appTup3M_ :: forall (m :: * -> *) a b c d e f.
Applicative m =>
(a -> m b) -> (c -> m d) -> (e -> m f) -> (a, c, e) -> m ()
appTup3M_ a -> m b
f c -> m d
g e -> m f
h = m (b, d, f) -> m ()
forall (f :: * -> *) a. Functor f => f a -> f ()
void (m (b, d, f) -> m ())
-> ((a, c, e) -> m (b, d, f)) -> (a, c, e) -> m ()
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (a -> m b) -> (c -> m d) -> (e -> m f) -> (a, c, e) -> m (b, d, f)
forall (m :: * -> *) a b c d e f.
Applicative m =>
(a -> m b) -> (c -> m d) -> (e -> m f) -> (a, c, e) -> m (b, d, f)
appTup3M a -> m b
f c -> m d
g e -> m f
h