packages feed

tools-yj-0.1.0.19: src/Data/Tuple/ToolsYj.hs

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

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

import Control.Monad

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

mapTup3 :: (a -> b) -> (a, a, a) -> (b, b, b)
mapTup3 f = appTup3 f f f

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

mapTup3M :: Applicative m => (a -> m b) -> (a, a, a) -> m (b, b, b)
mapTup3M f = appTup3M f f f

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

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

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