base-4.8.0.0: Basic libraries

Data.Bifunctor

Description

Since: 4.8.0.0

Synopsis

• class Bifunctor p where
• bimap :: (a -> b) -> (c -> d) -> p a c -> p b d
• first :: (a -> b) -> p a c -> p b c
• second :: (b -> c) -> p a b -> p a c

# Documentation

class Bifunctor p where Source

Formally, the class `Bifunctor` represents a bifunctor from `Hask` -> `Hask`.

Intuitively it is a bifunctor where both the first and second arguments are covariant.

You can define a `Bifunctor` by either defining `bimap` or by defining both `first` and `second`.

If you supply `bimap`, you should ensure that:

``bimap` `id` `id` ≡ `id``

If you supply `first` and `second`, ensure:

````first` `id` ≡ `id`
`second` `id` ≡ `id`
```

If you supply both, you should also ensure:

``bimap` f g ≡ `first` f `.` `second` g`

These ensure by parametricity:

````bimap`  (f `.` g) (h `.` i) ≡ `bimap` f h `.` `bimap` g i
`first`  (f `.` g) ≡ `first`  f `.` `first`  g
`second` (f `.` g) ≡ `second` f `.` `second` g
```

Since: 4.8.0.0

Minimal complete definition

Methods

bimap :: (a -> b) -> (c -> d) -> p a c -> p b d Source

Map over both arguments at the same time.

``bimap` f g ≡ `first` f `.` `second` g`

first :: (a -> b) -> p a c -> p b c Source

Map covariantly over the first argument.

``first` f ≡ `bimap` f `id``

second :: (b -> c) -> p a b -> p a c Source

Map covariantly over the second argument.

``second` ≡ `bimap` `id``

Instances

 Bifunctor Either Source Bifunctor (,) Source Bifunctor Const Source Bifunctor ((,,) x1) Source Bifunctor ((,,,) x1 x2) Source Bifunctor ((,,,,) x1 x2 x3) Source Bifunctor ((,,,,,) x1 x2 x3 x4) Source Bifunctor ((,,,,,,) x1 x2 x3 x4 x5) Source