¿Cómo iterar todos los tipos de productos en un coproducto usando sin forma?

Digamos que tengo uncoproducto (un rasgo sellado) como

sealed trait Traity
case object Foo extends Traity
case class Bar() extends Traity
case class Baz() extends Traity

Usando sin forma, puedo aplicar funciones polimórficas a instancias específicas, pero lo que me gustaría hacer es aplicar una función polimórfica de parámetro cero (sin instancia) a todos los productos (es decir, clases de casos y objetos de casos). No tengo idea de cómo se vería la sintaxis, pero algo conceptualmente como:

object mypoly extends Poly1 {
  implicit def traity[T <: Traity] = when[T]( getClass[T].toString )
}

iterate[Traity](mypoly) // gives List("Foo", "Bar", "Baz")

se adaptaría a mis propósitos.

Respuestas a la pregunta(1)

Su respuesta a la pregunta