Given the following definitions of [`Functor`](https://github.com/data61/fp-course/blob/fddbca36d02bd19029eee25e75faa933634763da/src/Course/Functor.hs#L21) and [`Coproduct`](https://github.com/data61/fp-course/blob/ad361c51862c5b7a7ba53a8767fa90bf38f2dc31/src/Course/Traversable.hs#L99) from [fp-course](https://github.com/data61/fp-course): > class Functor f where > (<$>) :: > (a -> b) > -> f a > -> f b > > class Functor f => Applicative f where > pure :: > a -> f a > (<*>) :: > f (a -> b) > -> f a > -> f b > > class Functor t => Traversable t where > traverse :: > Applicative f => > (a -> f b) > -> t a > -> f (t b) > > data Coproduct f g a = > InL (f a) > | InR (g a) Is there a cleaner or more succinct way to implement the following? instance (Traversable f, Traversable g) => Traversable (Coproduct f g) where traverse :: Applicative h => (a -> h b) -> Coproduct f g a -> h (Coproduct f g b) traverse f (InL fa) = InL <$> traverse f fa traverse f (InR ga) = InR <$> traverse f ga