Copyright | (c) 2018-2020 Kowainik |
---|---|

License | MIT |

Maintainer | Kowainik <xrom.xkov@gmail.com> |

Stability | Experimental |

Portability | Portable |

Safe Haskell | Safe |

Language | Haskell2010 |

Contains utility functions for working with tuples.

*Since: 0.4.0*

## Synopsis

- dup :: a -> (a, a)
- toFst :: (a -> b) -> a -> (b, a)
- toSnd :: (a -> b) -> a -> (a, b)
- fmapToFst :: Functor f => (a -> b) -> f a -> f (b, a)
- fmapToSnd :: Functor f => (a -> b) -> f a -> f (a, b)
- mapToFst :: (a -> b) -> a -> (b, a)
- mapToSnd :: (a -> b) -> a -> (a, b)
- traverseToFst :: Functor t => (a -> t b) -> a -> t (b, a)
- traverseToSnd :: Functor t => (a -> t b) -> a -> t (a, b)
- traverseBoth :: Applicative t => (a -> t b) -> (a, a) -> t (b, b)

# Documentation

Creates a tuple by pairing something with itself.

`>>>`

("foo","foo")`dup "foo"`

`>>>`

((),())`dup ()`

*Since: 0.6.0.0*

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

Apply a function, with the result in the fst slot, and the value in the other.

A dual to `toSnd`

.

`>>>`

(4,[3,1,0,2])`toFst length [3, 1, 0, 2]`

`>>>`

(15,10)`toFst (+5) 10`

*Since: 0.7.0.0*

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

Apply a function, with the result in the snd slot, and the value in the other.

A dual to `toFst`

.

`>>>`

([3,1,0,2],4)`toSnd length [3, 1, 0, 2]`

`>>>`

(10,15)`toSnd (+5) 10`

*Since: 0.7.0.0*

traverseToFst :: Functor t => (a -> t b) -> a -> t (b, a) Source #

Apply a function that returns a value inside of a functor, with the output in the first slot, the input in the second, and the entire tuple inside the functor.

A dual to `traverseToSnd`

`>>>`

Just (11,10)`traverseToFst (Just . (+1)) 10`

`>>>`

Nothing`traverseToFst (const Nothing) 10`

*Since: 0.5.0*

traverseToSnd :: Functor t => (a -> t b) -> a -> t (a, b) Source #

Apply a function that returns a value inside of a functor, with the output in the second slot, the input in the first, and the entire tuple inside the functor.

A dual to `traverseToFst`

.

`>>>`

Just (10,11)`traverseToSnd (Just . (+1)) 10`

`>>>`

Nothing`traverseToSnd (const Nothing) 10`

*Since: 0.5.0*

traverseBoth :: Applicative t => (a -> t b) -> (a, a) -> t (b, b) Source #

Maps a function that returns a value inside of an applicative functor over both elements of a tuple, with the entire tuple inside the applicative functor.

`>>>`

Just ("Hello Alice","Hello Bob")`traverseBoth (Just . ("Hello " <>)) ("Alice", "Bob")`

`>>>`

Nothing`traverseBoth (const Nothing) ("Alice", "Bob")`