Implementing Traversable for Coproduct
Here is how Edward Kmett implemented traverse in the Data.Functor.Coproduct package. 

instance (Traversable f, Traversable g) =&gt; Traversable (Coproduct f g) where
  traverse f = coproduct
    (fmap (Coproduct . Left) . traverse f)
    (fmap (Coproduct . Right) . traverse f)


While he writes in a points free style and uses Either under the hood instead of your bespoke Coproduct instance, the result is still the same.  Apply the supplied function to either the left or right branch and wrap the result back in the constructor.

I do not see a better way to than the implementation given unless η-conversion to points-free is appealing for some reason.