| Copyright | (C) 2008-2014 Edward Kmett |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | [email protected] |
| Stability | provisional |
| Portability | portable |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Since: 4.8.0.0
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:
bimapidid≡id
If you supply first and second, ensure:
firstid≡idsecondid≡id
If you supply both, you should also ensure:
bimapf g ≡firstf.secondg
These ensure by parametricity:
bimap(f.g) (h.i) ≡bimapf h.bimapg ifirst(f.g) ≡firstf.firstgsecond(f.g) ≡secondf.secondg
Since: 4.8.0.0
bimap :: (a -> b) -> (c -> d) -> p a c -> p b d Source
Map over both arguments at the same time.
bimapf g ≡firstf.secondg
first :: (a -> b) -> p a c -> p b c Source
Map covariantly over the first argument.
firstf ≡bimapfid
second :: (b -> c) -> p a b -> p a c Source
Map covariantly over the second argument.
second≡bimapid
| Bifunctor Either | Since: 4.8.0.0 |
| Bifunctor (,) | Since: 4.8.0.0 |
| Bifunctor Arg | Since: 4.9.0.0 |
| Bifunctor ((,,) x1) | Since: 4.8.0.0 |
| Bifunctor (Const *) | Since: 4.8.0.0 |
| Bifunctor (K1 * i) | Since: 4.9.0.0 |
| Bifunctor ((,,,) x1 x2) | Since: 4.8.0.0 |
| Bifunctor ((,,,,) x1 x2 x3) | Since: 4.8.0.0 |
| Bifunctor ((,,,,,) x1 x2 x3 x4) | Since: 4.8.0.0 |
| Bifunctor ((,,,,,,) x1 x2 x3 x4 x5) | Since: 4.8.0.0 |
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.2.1/docs/html/libraries/base-4.10.0.0/Data-Bifunctor.html