Scala 生成参数化案例的任意实例 class

Scala generate arbitrary instance of parametrized case class

我想生成参数化案例的任意元素 class,并发现 this library 使用 ScalaCheck 的 gen 来完成它。这适用于具体类型,但不适用于抽象类型;有办法解决这个问题吗?

import com.danielasfregola.randomdatagenerator.RandomDataGenerator._
sealed trait FooBound {
   def bar: String
}

trait Foo[A <: FooBound] {
   implicit val fooBound = random[FooBound] // works fine
   implicit val a = random[A] 
   // fails due to: could not find implicit value
   //               for evidence parameter of type 
   //               org.scalacheck.Arbitrary[A]
}

随机生成器依赖于 ClassTag 类型的隐式值来完成它的工作。但是,直到另一个特征或 class 实际上扩展了 Foo,A 才为人所知,因此编译器无法像对 fooBound 那样提供隐式参数。尝试保持 'a' 抽象,然后在其他 class 中覆盖它,或者将 A 作为 ClassTag 传入?看这里的源码可以看到https://github.com/DanielaSfregola/random-data-generator/blob/master/js/src/main/scala/com/danielasfregola/randomdatagenerator/RandomDataGenerator.scala