Safe Haskell | None |
---|---|
Language | Haskell2010 |
Documentation
class Bifunctor (p :: * -> * -> *) where #
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 ifirst
(f.
g) ≡first
f.
first
gsecond
(f.
g) ≡second
f.
second
g
Since: base-4.8.0.0
Instances
Bifunctor Either | Since: base-4.8.0.0 |
Bifunctor (,) | Since: base-4.8.0.0 |
Bifunctor Arg | Since: base-4.9.0.0 |
Bifunctor ListF | |
Bifunctor NonEmptyF | |
Bifunctor ((,,) x1) | Since: base-4.8.0.0 |
Bifunctor (Const :: * -> * -> *) | Since: base-4.8.0.0 |
Functor f => Bifunctor (FreeF f) | |
Functor f => Bifunctor (CofreeF f) | |
Bifunctor (Tagged :: * -> * -> *) | |
Bifunctor (K1 i :: * -> * -> *) | 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 p => Bifunctor (WrappedBifunctor p) | |
Defined in Data.Bifunctor.Wrapped bimap :: (a -> b) -> (c -> d) -> WrappedBifunctor p a c -> WrappedBifunctor p b d # first :: (a -> b) -> WrappedBifunctor p a c -> WrappedBifunctor p b c # second :: (b -> c) -> WrappedBifunctor p a b -> WrappedBifunctor p a c # | |
Functor g => Bifunctor (Joker g :: * -> * -> *) | |
Bifunctor p => Bifunctor (Flip p) | |
Functor f => Bifunctor (Clown f :: * -> * -> *) | |
Bifunctor ((,,,,,) x1 x2 x3 x4) | Since: base-4.8.0.0 |
(Bifunctor p, Bifunctor q) => Bifunctor (Sum p q) | |
(Bifunctor f, Bifunctor g) => Bifunctor (Product f g) | |
Bifunctor ((,,,,,,) x1 x2 x3 x4 x5) | Since: base-4.8.0.0 |
(Functor f, Bifunctor p) => Bifunctor (Tannen f p) | |
(Bifunctor p, Functor f, Functor g) => Bifunctor (Biff p f g) | |
deriveBitraversable :: Name -> Q [Dec] #
Generates a Bitraversable
instance declaration for the given data type or data
family instance.
deriveBifoldable :: Name -> Q [Dec] #
Generates a Bifoldable
instance declaration for the given data type or data
family instance.
deriveBifunctor :: Name -> Q [Dec] #
Generates a Bifunctor
instance declaration for the given data type or data
family instance.