def combineAll[T, Typeclass[T] <: Monoid[T]]()

in cats/src/main/scala/magnolify/cats/semiauto/MonoidDerivation.scala [72:91]


  def combineAll[T, Typeclass[T] <: Monoid[T]](
    caseClass: CaseClass[Typeclass, T]
  ): IterableOnce[T] => T = {
    val combineImpl = SemigroupMethods.combine(caseClass)
    val emptyImpl = MonoidMethods.empty(caseClass)

    {
      case it: Iterable[T] if it.nonEmpty =>
        // input is re-iterable and non-empty, combineAll 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.combineAll(it.iterator.map(p.dereference))
          i += 1
        }
        caseClass.rawConstruct(ArraySeq.unsafeWrapArray(result))
      case xs => xs.iterator.foldLeft(emptyImpl())(combineImpl)
    }
  }