Was ist die Ursache für diesen Typ Fehler?

Zwei Fragen

Warum kann dieser Code nicht kompiliert werden? ICHglaube (aber ich bin mir nicht zu 100% sicher, dass ich einen Fehler gemacht habe), dass er typrichtig ist.

Was bedeutet die Fehlermeldung? Ich bin verwirrt, warum der erwartete Argumenttyp @ is_ -> _ (oder vielleicht weiß ich einfach nicht, was es mit @ bedeut_ -> _ in diesem Fall). Das Ziel dieser Frage ist es, zu lernen, wie diese Fehlermeldung richtig diagnostiziert wird, sollte ich sie in Zukunft erneut sehen.

Der Code

Dieser Code kann nicht mit der Fehlermeldung "Wert vom Typ 'A -> B' kann nicht in den erwarteten Argumenttyp '_ -> _' konvertiert werden:

class ZipList<A> {
    let xs: [A]
    init(xs: [A]) {
        self.xs = xs
    }
    func map<B>(f: A -> B) -> ZipList<B> {
        return ZipList(xs: self.xs.map(f))
    }
}

Zusätzliche Information

Zunächst habe ich angenommen, dass das Problem bei der Typinferenz liegt. Deshalb habe ich versucht, die Typen explizit auszuschreiben, aber das ist auch fehlgeschlagen:

Allerdings kompiliert dies ganz gut (der einzige Unterschied zu meinem ursprünglichenmap version ist das<B> an das @ übergebZipList initializer):

func map4<B>(f: A -> B) -> ZipList<B> {
    return ZipList<B>(xs: self.xs.map(f))
}

Antworten auf die Frage(2)

Ihre Antwort auf die Frage