Suppose there is a typical type class
trait Gen[T] {
def generate(): T
}
object Gen {
val random = new Random()
implicit val stringGen: Gen[String] = () => random.nextString(10)
implicit val intGen: Gen[Int] = () => random.nextInt()
implicit def optionGen[T: Gen]: Gen[Option[T]] = () => Some(implicitly[Gen[T]].generate())
}
object Generator {
def apply[T: Gen]: T = implicitly[Gen[T]].generate()
}
Calling Generator[Option[String]] will generate a random string wrapped in a Some.
How can Generator.apply be called at runtime via reflection having for example as parameter a type like val typeTag = typeOf[Option[String]]?
Aucun commentaire:
Enregistrer un commentaire