¿Cuál es la causa de este tipo de error?

Dos preguntas:

¿Por qué este código no se compila? yocreer (pero no estoy 100% seguro, es posible que haya cometido un error) de que es de tipo correcto.

Que quiere decir el mensaje de error? Estoy confundido por qué el tipo de argumento esperado es_ -> _ (o tal vez simplemente no sé qué significa_ -> _ en este caso). El objetivo de esta pregunta es aprender a diagnosticar correctamente este mensaje de error, en caso de que vuelva a encontrarlo en el futuro.

El código:

Este código no se compila con el mensaje de error "No se puede convertir el valor del tipo 'A -> B' al tipo de argumento esperado '_ -> _':

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))
    }
}

Información Adicional:

Al principio, asumí que el problema era con la inferencia de tipos, así que intenté escribir los tipos explícitamente, pero eso también falló:

Sin embargo, esto se compila muy bien (la única diferencia con mi originalmap&nbsp;la versión es la<B>&nbsp;pasado a laZipList&nbsp;inicializador):

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