swap package:assoc

Symmetric Bifunctors.
swap . swap = id
If p is a Bifunctor the following property is assumed to hold:
swap . bimap f g = bimap g f . swap
Swap 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)