I read the following about [coproducts](https://github.com/milessabin/shapeless/wiki/Feature-overview:-shapeless-2.0.0#coproducts-and-discriminated-unions) in the excellent [Shapeless Guide](http://underscore.io/books/shapeless-guide/):

> 
> ... it’s worth stating that Coproducts aren’t particularly special. The functionality above can be achieved using Either and Nothing in place of :+:
>  and CNil.
> 
> 
> 

Here's the above code:

```
import shapeless.{Coproduct, :+:, CNil, Inl, Inr}
case class Red()
case class Amber()
case class Green()
type Light = Red :+: Amber :+: Green :+: CNil

val red: Light = Inl(Red())
// red: Light = Inl(Red())
val green: Light = Inr(Inr(Inl(Green())))
// green: Light = Inr(Inr(Inl(Green())))

```

For my own understanding, what is the benefit, if any, of using a Coproduct over a `sealed trait`?