| 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: base-4.8.0.0
class Bifunctor p where Source
A bifunctor is a type constructor that takes two type arguments and is a functor in both arguments. That is, unlike with Functor, a type constructor such as Either does not need to be partially applied for a Bifunctor instance, and the methods in this class permit mapping functions over the Left value or the Right value, or both at the same time.
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: base-4.8.0.0
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
>>> bimap toUpper (+1) ('j', 3)
('J',4)
>>> bimap toUpper (+1) (Left 'j') Left 'J'
>>> bimap toUpper (+1) (Right 3) Right 4
first :: (a -> b) -> p a c -> p b c Source
Map covariantly over the first argument.
first f ≡ bimap f id
>>> first toUpper ('j', 3)
('J',3)
>>> first toUpper (Left 'j') Left 'J'
second :: (b -> c) -> p a b -> p a c Source
Map covariantly over the second argument.
second ≡ bimap id
>>> second (+1) ('j', 3)
('j',4)
>>> second (+1) (Right 3) Right 4
| Bifunctor Either | Since: base-4.8.0.0 |
| Bifunctor (,) | Since: base-4.8.0.0 |
| Bifunctor Arg | Since: base-4.9.0.0 |
| Bifunctor ((,,) x1) | Since: base-4.8.0.0 |
| Bifunctor (Const :: Type -> Type -> Type) | Since: base-4.8.0.0 |
| Bifunctor (K1 i :: Type -> Type -> Type) | Since: base-4.9.0.0 |
| Bifunctor ((,,,) x1 x2) | Since: base-4.8.0.0 |
| Bifunctor ((,,,,) x1 x2 x3) | Since: base-4.8.0.0 |
| Bifunctor ((,,,,,) x1 x2 x3 x4) | Since: base-4.8.0.0 |
| Bifunctor ((,,,,,,) x1 x2 x3 x4 x5) | Since: base-4.8.0.0 |
Defined in Data.Bifunctor | |
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.6.1/docs/html/libraries/base-4.12.0.0/Data-Bifunctor.html