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