How to "reify" a value class definition in Scala

I try to reifydefine an implicit value class (extension method) and get an error value class may not be a local classwhen I do this:


import scala.reflect.runtime.universe._
val reifiedImplicitValueClass = reify {
  implicit class RicherDouble(val value: Double) extends AnyVal {
    def times(that: Double): Double = value * that
  }
}

error: value class may not be a local class
         implicit class RicherDouble(val value: Double) extends AnyVal {
                        ^

If I do this with a regular implicit class, removing extends AnyValit works fine:


import scala.reflect.runtime.universe._
val reifiedImplicitClass = reify {
  implicit class RicherDouble(val value: Double)  {
    def times(that: Double): Double = value * that
  }
}

reifiedImplicitClass: reflect.runtime.universe.Expr[Unit] =
Expr[Unit]({
  implicit class RicherDouble extends AnyRef {
     val value: Double = _;
    def (value: Double) = {
      super.();
      ()
    };
    def times(that: Double): Double = RicherDouble.this.value.$times(that)
  };
  implicit  def RicherDouble(value: Double): RicherDouble = new RicherDouble(value);
  ()
})

Is it possible to override value classes through the reflection API? If so, how should my definition be changed?

I am using Scala 2.11.6.

+4
source share

All Articles