def split[T: Fallback]()

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
        }
      }
    }
  }