You need `E <: java.lang.Enum[E]` because otherwise `scalac` complains that, in  `E <:< java.lang.Enum[E]`, `E` is not of type `E < Enum[E]`. I added these bounds without realising that they probably obviate the need for the implicit!