swap . swap = idIf p is a Bifunctor the following property is assumed to hold:
swap . bimap f g = bimap g f . swapSwap isn't a subclass of Bifunctor, as for example
>>> newtype Bipredicate a b = Bipredicate (a -> b -> Bool)is not a Bifunctor but has Swap instance
>>> instance Swap Bipredicate where swap (Bipredicate p) = Bipredicate (flip p)