def combineAllOption[T, Typeclass[T] <: Semigroup[T]]()

in cats/src/main/scala/magnolify/cats/semiauto/SemigroupDerivation.scala [69:88]


  def combineAllOption[T, Typeclass[T] <: Semigroup[T]](
    caseClass: CaseClass[Typeclass, T]
  ): IterableOnce[T] => Option[T] = {
    val combineImpl = combine(caseClass)

    {
      case it: Iterable[T] if it.nonEmpty =>
        // input is re-iterable and non-empty, combineAllOption on each field
        val result = Array.fill[Any](caseClass.parameters.length)(null)
        var i = 0
        while (i < caseClass.parameters.length) {
          val p = caseClass.parameters(i)
          result(i) = p.typeclass.combineAllOption(it.iterator.map(p.dereference)).get
          i += 1
        }
        Some(caseClass.rawConstruct(ArraySeq.unsafeWrapArray(result)))
      case xs =>
        xs.iterator.reduceOption(combineImpl)
    }
  }