Most of the time, users want to reduce a sequence, of say Bytes, into a single object.
func reduce<T>(into: T.Type = T.self, transformer: (iterator) async throws -> T) async throws -> T {
var iterator = self.makeAsyncIterator()
let result = try await transformer(iterator)
/// Make sure we are EOF
guard try await iterator.next() == nil
else { throw ... }
return result
}