Safe Haskell | Safe |
---|---|

Language | Haskell2010 |

## Synopsis

- data These a b
- these :: (a -> c) -> (b -> c) -> (a -> b -> c) -> These a b -> c
- fromThese :: a -> b -> These a b -> (a, b)
- mergeThese :: (a -> a -> a) -> These a a -> a
- mergeTheseWith :: (a -> c) -> (b -> c) -> (c -> c -> c) -> These a b -> c
- partitionThese :: [These a b] -> ([a], [b], [(a, b)])
- partitionHereThere :: [These a b] -> ([a], [b])
- partitionEithersNE :: NonEmpty (Either a b) -> These (NonEmpty a) (NonEmpty b)
- distrThesePair :: These (a, b) c -> (These a c, These b c)
- undistrThesePair :: (These a c, These b c) -> These (a, b) c
- distrPairThese :: (These a b, c) -> These (a, c) (b, c)
- undistrPairThese :: These (a, c) (b, c) -> (These a b, c)

# Documentation

The strict these type.

#### Instances

# Functions to get rid of `These`

these :: (a -> c) -> (b -> c) -> (a -> b -> c) -> These a b -> c Source #

Case analysis for the `These`

type.

mergeThese :: (a -> a -> a) -> These a a -> a Source #

Coalesce with the provided operation.

mergeTheseWith :: (a -> c) -> (b -> c) -> (c -> c -> c) -> These a b -> c Source #

`bimap`

and coalesce results with the provided operation.

# Partition

partitionThese :: [These a b] -> ([a], [b], [(a, b)]) Source #

Select each constructor and partition them into separate lists.

partitionHereThere :: [These a b] -> ([a], [b]) Source #

Select `here`

and `there`

elements and partition them into separate lists.

partitionEithersNE :: NonEmpty (Either a b) -> These (NonEmpty a) (NonEmpty b) Source #

Like `partitionEithers`

but for `NonEmpty`

types.

*Note:* this is not online algorithm. In the worst case it will traverse
the whole list before deciding the result constructor.

`>>>`

These ('x' :| "") ('y' :| "")`partitionEithersNE $ Left 'x' :| [Right 'y']`

`>>>`

This ('x' :| "yz")`partitionEithersNE $ Left 'x' :| map Left "yz"`

# Distributivity

This distributivity combinators aren't isomorphisms!

distrPairThese :: (These a b, c) -> These (a, c) (b, c) Source #

undistrPairThese :: These (a, c) (b, c) -> (These a b, c) Source #