| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Prologue.Data.Bifunctor
Synopsis
- mapFirst :: Bifunctor p => (a -> b) -> p a c -> p b c
- mapSecond :: Bifunctor p => (b -> c) -> p a b -> p a c
- class Bifunctor (p :: Type -> Type -> Type) where
- bimap :: (a -> b) -> (c -> d) -> p a c -> p b d
- deriveBitraversable :: Name -> Q [Dec]
- deriveBifoldable :: Name -> Q [Dec]
- deriveBifunctor :: Name -> Q [Dec]
Documentation
class Bifunctor (p :: Type -> Type -> Type) 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:
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: base-4.8.0.0
Methods
Instances
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.