extra-1.8: Extra functions I use.
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.Tuple.Extra

Description

Extra functions for working with pairs and triples. Some of these functions are available in the Control.Arrow module, but here are available specialised to pairs. Some operations work on triples.

Synopsis
  • curry :: ((a, b) -> c) -> a -> b -> c
  • fst :: (a, b) -> a
  • snd :: (a, b) -> b
  • uncurry :: (a -> b -> c) -> (a, b) -> c
  • data Solo a where
  • getSolo :: Solo a -> a
  • swap :: (a, b) -> (b, a)
  • first :: (a -> a') -> (a, b) -> (a', b)
  • second :: (b -> b') -> (a, b) -> (a, b')
  • (***) :: (a -> a') -> (b -> b') -> (a, b) -> (a', b')
  • (&&&) :: (a -> b) -> (a -> c) -> a -> (b, c)
  • dupe :: a -> (a, a)
  • both :: (a -> b) -> (a, a) -> (b, b)
  • firstM :: Functor m => (a -> m a') -> (a, b) -> m (a', b)
  • secondM :: Functor m => (b -> m b') -> (a, b) -> m (a, b')
  • fst3 :: (a, b, c) -> a
  • snd3 :: (a, b, c) -> b
  • thd3 :: (a, b, c) -> c
  • first3 :: (a -> a') -> (a, b, c) -> (a', b, c)
  • second3 :: (b -> b') -> (a, b, c) -> (a, b', c)
  • third3 :: (c -> c') -> (a, b, c) -> (a, b, c')
  • curry3 :: ((a, b, c) -> d) -> a -> b -> c -> d
  • uncurry3 :: (a -> b -> c -> d) -> (a, b, c) -> d

Documentation

curry :: ((a, b) -> c) -> a -> b -> c #

fst :: (a, b) -> a #

snd :: (a, b) -> b #

uncurry :: (a -> b -> c) -> (a, b) -> c #

data Solo a #

Constructors

MkSolo a 

Bundled Patterns

pattern Solo :: a -> Solo a 

Instances

Instances details
MonadZip Solo 
Instance details

Defined in Control.Monad.Zip

Methods

mzip :: Solo a -> Solo b -> Solo (a, b)

mzipWith :: (a -> b -> c) -> Solo a -> Solo b -> Solo c

munzip :: Solo (a, b) -> (Solo a, Solo b)

Foldable1 Solo 
Instance details

Defined in Data.Foldable1

Methods

fold1 :: Semigroup m => Solo m -> m

foldMap1 :: Semigroup m => (a -> m) -> Solo a -> m

foldMap1' :: Semigroup m => (a -> m) -> Solo a -> m

toNonEmpty :: Solo a -> NonEmpty a

maximum :: Ord a => Solo a -> a

minimum :: Ord a => Solo a -> a

head :: Solo a -> a

last :: Solo a -> a

foldrMap1 :: (a -> b) -> (a -> b -> b) -> Solo a -> b

foldlMap1' :: (a -> b) -> (b -> a -> b) -> Solo a -> b

foldlMap1 :: (a -> b) -> (b -> a -> b) -> Solo a -> b

foldrMap1' :: (a -> b) -> (a -> b -> b) -> Solo a -> b

Eq1 Solo 
Instance details

Defined in Data.Functor.Classes

Methods

liftEq :: (a -> b -> Bool) -> Solo a -> Solo b -> Bool

Ord1 Solo 
Instance details

Defined in Data.Functor.Classes

Methods

liftCompare :: (a -> b -> Ordering) -> Solo a -> Solo b -> Ordering

Read1 Solo 
Instance details

Defined in Data.Functor.Classes

Methods

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (Solo a)

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [Solo a]

liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (Solo a)

liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [Solo a]

Show1 Solo 
Instance details

Defined in Data.Functor.Classes

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Solo a -> ShowS

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Solo a] -> ShowS

NFData1 Solo 
Instance details

Defined in Control.DeepSeq

Methods

liftRnf :: (a -> ()) -> Solo a -> ()

Applicative Solo 
Instance details

Defined in GHC.Internal.Base

Methods

pure :: a -> Solo a

(<*>) :: Solo (a -> b) -> Solo a -> Solo b

liftA2 :: (a -> b -> c) -> Solo a -> Solo b -> Solo c

(*>) :: Solo a -> Solo b -> Solo b

(<*) :: Solo a -> Solo b -> Solo a

Functor Solo 
Instance details

Defined in GHC.Internal.Base

Methods

fmap :: (a -> b) -> Solo a -> Solo b #

(<$) :: a -> Solo b -> Solo a #

Monad Solo 
Instance details

Defined in GHC.Internal.Base

Methods

(>>=) :: Solo a -> (a -> Solo b) -> Solo b #

(>>) :: Solo a -> Solo b -> Solo b #

return :: a -> Solo a #

Foldable Solo 
Instance details

Defined in GHC.Internal.Data.Foldable

Methods

fold :: Monoid m => Solo m -> m #

foldMap :: Monoid m => (a -> m) -> Solo a -> m #

foldMap' :: Monoid m => (a -> m) -> Solo a -> m #

foldr :: (a -> b -> b) -> b -> Solo a -> b #

foldr' :: (a -> b -> b) -> b -> Solo a -> b #

foldl :: (b -> a -> b) -> b -> Solo a -> b #

foldl' :: (b -> a -> b) -> b -> Solo a -> b #

foldr1 :: (a -> a -> a) -> Solo a -> a #

foldl1 :: (a -> a -> a) -> Solo a -> a #

toList :: Solo a -> [a] #

null :: Solo a -> Bool #

length :: Solo a -> Int #

elem :: Eq a => a -> Solo a -> Bool #

maximum :: Ord a => Solo a -> a #

minimum :: Ord a => Solo a -> a #

sum :: Num a => Solo a -> a #

product :: Num a => Solo a -> a #

Traversable Solo 
Instance details

Defined in GHC.Internal.Data.Traversable

Methods

traverse :: Applicative f => (a -> f b) -> Solo a -> f (Solo b)

sequenceA :: Applicative f => Solo (f a) -> f (Solo a)

mapM :: Monad m => (a -> m b) -> Solo a -> m (Solo b) #

sequence :: Monad m => Solo (m a) -> m (Solo a) #

Generic1 Solo 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep1 Solo 
Instance details

Defined in GHC.Internal.Generics

type Rep1 Solo = D1 ('MetaData "Solo" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "MkSolo" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))

Methods

from1 :: Solo a -> Rep1 Solo a

to1 :: Rep1 Solo a -> Solo a

NFData a => NFData (Solo a) 
Instance details

Defined in Control.DeepSeq

Methods

rnf :: Solo a -> ()

Monoid a => Monoid (Solo a) 
Instance details

Defined in GHC.Internal.Base

Methods

mempty :: Solo a #

mappend :: Solo a -> Solo a -> Solo a #

mconcat :: [Solo a] -> Solo a #

Semigroup a => Semigroup (Solo a) 
Instance details

Defined in GHC.Internal.Base

Methods

(<>) :: Solo a -> Solo a -> Solo a #

sconcat :: NonEmpty (Solo a) -> Solo a

stimes :: Integral b => b -> Solo a -> Solo a

Bounded a => Bounded (Solo a) 
Instance details

Defined in GHC.Internal.Enum

Methods

minBound :: Solo a

maxBound :: Solo a

Enum a => Enum (Solo a) 
Instance details

Defined in GHC.Internal.Enum

Methods

succ :: Solo a -> Solo a

pred :: Solo a -> Solo a

toEnum :: Int -> Solo a

fromEnum :: Solo a -> Int

enumFrom :: Solo a -> [Solo a]

enumFromThen :: Solo a -> Solo a -> [Solo a]

enumFromTo :: Solo a -> Solo a -> [Solo a]

enumFromThenTo :: Solo a -> Solo a -> Solo a -> [Solo a]

Generic (Solo a) 
Instance details

Defined in GHC.Internal.Generics

Associated Types

type Rep (Solo a) 
Instance details

Defined in GHC.Internal.Generics

type Rep (Solo a) = D1 ('MetaData "Solo" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "MkSolo" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

Methods

from :: Solo a -> Rep (Solo a) x

to :: Rep (Solo a) x -> Solo a

Read a => Read (Solo a) 
Instance details

Defined in GHC.Internal.Read

Show a => Show (Solo a) 
Instance details

Defined in GHC.Internal.Show

Methods

showsPrec :: Int -> Solo a -> ShowS

show :: Solo a -> String

showList :: [Solo a] -> ShowS

Eq a => Eq (Solo a) 
Instance details

Defined in GHC.Classes

Methods

(==) :: Solo a -> Solo a -> Bool

(/=) :: Solo a -> Solo a -> Bool

Ord a => Ord (Solo a) 
Instance details

Defined in GHC.Classes

Methods

compare :: Solo a -> Solo a -> Ordering

(<) :: Solo a -> Solo a -> Bool

(<=) :: Solo a -> Solo a -> Bool

(>) :: Solo a -> Solo a -> Bool

(>=) :: Solo a -> Solo a -> Bool

max :: Solo a -> Solo a -> Solo a

min :: Solo a -> Solo a -> Solo a

type Rep1 Solo 
Instance details

Defined in GHC.Internal.Generics

type Rep1 Solo = D1 ('MetaData "Solo" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "MkSolo" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))
type Rep (Solo a) 
Instance details

Defined in GHC.Internal.Generics

type Rep (Solo a) = D1 ('MetaData "Solo" "GHC.Tuple" "ghc-prim" 'False) (C1 ('MetaCons "MkSolo" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 a)))

getSolo :: Solo a -> a #

swap :: (a, b) -> (b, a) #

Specialised Arrow functions

first :: (a -> a') -> (a, b) -> (a', b) Source #

Update the first component of a pair.

first succ (1,"test") == (2,"test")

second :: (b -> b') -> (a, b) -> (a, b') Source #

Update the second component of a pair.

second reverse (1,"test") == (1,"tset")

(***) :: (a -> a') -> (b -> b') -> (a, b) -> (a', b') infixr 3 Source #

Given two functions, apply one to the first component and one to the second. A specialised version of ***.

(succ *** reverse) (1,"test") == (2,"tset")

(&&&) :: (a -> b) -> (a -> c) -> a -> (b, c) infixr 3 Source #

Given two functions, apply both to a single argument to form a pair. A specialised version of &&&.

(succ &&& pred) 1 == (2,0)

More pair operations

dupe :: a -> (a, a) Source #

Duplicate a single value into a pair.

dupe 12 == (12, 12)

both :: (a -> b) -> (a, a) -> (b, b) Source #

Apply a single function to both components of a pair.

both succ (1,2) == (2,3)

Monadic versions

firstM :: Functor m => (a -> m a') -> (a, b) -> m (a', b) Source #

Update the first component of a pair.

firstM (\x -> [x-1, x+1]) (1,"test") == [(0,"test"),(2,"test")]

secondM :: Functor m => (b -> m b') -> (a, b) -> m (a, b') Source #

Update the second component of a pair.

secondM (\x -> [reverse x, x]) (1,"test") == [(1,"tset"),(1,"test")]

Operations on triple

fst3 :: (a, b, c) -> a Source #

Extract the fst of a triple.

snd3 :: (a, b, c) -> b Source #

Extract the snd of a triple.

thd3 :: (a, b, c) -> c Source #

Extract the final element of a triple.

first3 :: (a -> a') -> (a, b, c) -> (a', b, c) Source #

Update the first component of a triple.

first3 succ (1,1,1) == (2,1,1)

second3 :: (b -> b') -> (a, b, c) -> (a, b', c) Source #

Update the second component of a triple.

second3 succ (1,1,1) == (1,2,1)

third3 :: (c -> c') -> (a, b, c) -> (a, b, c') Source #

Update the third component of a triple.

third3 succ (1,1,1) == (1,1,2)

curry3 :: ((a, b, c) -> d) -> a -> b -> c -> d Source #

Converts an uncurried function to a curried function.

uncurry3 :: (a -> b -> c -> d) -> (a, b, c) -> d Source #

Converts a curried function to a function on a triple.