*** package:constraints
due to the hack for the kind of (,) in the current version of
GHC we can't actually make instances for (,) :: Constraint ->
Constraint -> Constraint, but (,) is a bifunctor on
the category of constraints. This lets us map over both sides.