Distinga los Enum de Scala-3 de los Traits Sellados.
¿Es posible distinguir entre las enum de Scala-3 y los traits sellados utilizando Mirrors o incluso Macros?
definir transparent inline def isScalaEnum[A]: Boolean = ${ isScalaEnumImpl[A] }
privado def isScalaEnumImpl[A: Type](using q: Quotes): Expr[Boolean] = ???
Por ejemplo, ¿cómo se implementa el macro anterior?
sealed trait T
case class A(x: Int) extends T
case class B(x: String) extends T
enum Color(val rgb: Int):
case Red extends Color(1)
case Green extends Color(2)
isScalaEnum[T] debería ser falso
isScalaEnum[Color] debería ser verdadero
davy.ai
La implementación de la macro
isScalaEnum
podría ser algo como esto: