in scalacheck/src/main/scala/magnolify/scalacheck/semiauto/ArbitraryDerivation.scala [36:53]
def split[T: Fallback](sealedTrait: SealedTrait[Typeclass, T]): Typeclass[T] = Arbitrary {
if (sealedTrait.typeName.full == classOf[Seed].getCanonicalName) {
// Prevent derivation of invalid seed via `Seed.apply(0, 0, 0, 0)`
// https://github.com/typelevel/scalacheck/pull/674
Arbitrary.arbLong.arbitrary.map(Seed(_)).asInstanceOf[Gen[T]]
} else {
Gen.sized { size =>
if (size > 0) {
Gen.resize(
size - 1,
Gen.oneOf(sealedTrait.subtypes.map(_.typeclass.arbitrary)).flatMap(identity)
)
} else {
implicitly[Fallback[T]].get
}
}
}
}