// `reduce(_:_:)`
func reduce<Result>(
_ initialResult : Result,
// ⭐️ combine function (with return value)
_ nextPartialResult: (Result, Element) throws -> Result
) rethrows -> Result
// `reduce(into:_:)`
func reduce<Result>(
into initialResult: Result,
_ updateAccumulatingResult: (
_ partialResult: inout Result, // ⭐️ inout parameter
Self.Element
) throws -> () // ⭐️ no return value
) rethrows -> Result
.reduce(into:) is preferred over reduce() for efficiency when the result is a copy-on-write type, for example an Array or a Dictionary. 👉.reduce(into:_:)