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.

Homepage:
http://hackage.haskell.org/package/bifunctors
