Hi, I'm exploring using the new parameter packs in result builders, as is now done in SwiftUI, but I'm getting this weird error (even though I'm essentially following how SwiftUI does it):

@resultBuilder
public struct FormBuilder {
    public static func buildBlock<each Content: FormComponent>(_ content: repeat each Content) -> TupleFormComponent<(repeat each Content)> {
        return TupleFormComponent<each Content>(content: content)
    }
}

Gives the error Type '(repeat each Content)' does not conform to protocol 'FormComponent'.

The FormComponent struct looks like this:

public struct TupleFormComponent<each Component: FormComponent>: FormComponent { ... }

So to me it feels like this should work. Let me know if you think I made any glaring mistakes!

Your return type has extra parens, so it’s trying to make a TupleFormComponent of one element, a tuple (which presumably gets redundantly parenthesized within the implementation of TupleFormComponent), rather than the many-element pack you’re using in the body of the function.

Good candidate for a special-case diagnostic, perhaps?

1 Like