Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
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
- 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
- curry3 :: ((a, b, c) -> d) -> a -> b -> c -> d
- uncurry3 :: (a -> b -> c -> d) -> (a, b, c) -> d
Specialised Arrow
functions
first :: (a -> a') -> (a, b) -> (a', b) #
Update the first component of a pair.
first succ (1,"test") == (2,"test")
second :: (b -> b') -> (a, b) -> (a, b') #
Update the second component of a pair.
second reverse (1,"test") == (1,"tset")
(***) :: (a -> a') -> (b -> b') -> (a, b) -> (a', b') infixr 3 #
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 #
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
both :: (a -> b) -> (a, a) -> (b, b) #
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) #
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') #
Update the second component of a pair.
secondM (\x -> [reverse x, x]) (1,"test") == [(1,"tset"),(1,"test")]