Bifunctor is the class of types with two type parameters (
f :: * -> * -> *), both of which can be covariantly mapped over simultaneously.
class Bifunctor f where bimap :: (a -> c) -> (b -> d) -> f a b -> f c d
bimap can be thought of as applying a pair of
fmap operations to a datatype.
A correct instance of
Bifunctor for a type
f must satisfy the bifunctor laws, which are analogous to the functor laws:
bimap id id = id -- identity bimap (f . g) (h . i) = bimap f h . bimap g i -- composition
Bifunctor class is found in the
Data.Bifunctor module. For GHC versions >7.10, this module is bundled with the compiler; for earlier versions you need to install the