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:
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 ifirst
(f.
g) ≡first
f.
first
gsecond
(f.
g) ≡second
f.
second
g
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.
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
fid
second :: (b -> c) -> p a b -> p a c Source
Map covariantly over the second argument.
second
≡bimap
id
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.0.1/docs/html/libraries/base-4.9.0.0/Data-Bifunctor.html