Module DA.Bifunctor¶
Typeclasses¶
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 asEither
does not need to be partially applied for aBifunctor
instance, and the methods in this class permit mapping functions over the Left value or theRight
value, or both at the same time.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:
If you supply first and second, ensure:
If you supply both, you should also ensure:
By parametricity, these will ensure that:
- bimap
: (a -> b) -> (c -> d) -> p a c -> p b d
Map over both arguments at the same time.
Examples:
- first
: (a -> b) -> p a c -> p b c
Map covariantly over the first argument.
Examples:
- second
: (b -> c) -> p a b -> p a c
Map covariantly over the second argument.
Examples:
instance Bifunctor ()
instance Bifunctor x1
instance Bifunctor (x1, x2)
instance Bifunctor (x1, x2, x3)
instance Bifunctor (x1, x2, x3, x4)
instance Bifunctor (x1, x2, x3, x4, x5)