Qual é a causa desse erro de tipo?

Duas questões:

Por que esse código falha na compilação? Euacreditam (mas não tenho 100% de certeza, posso ter cometido um erro) de que está correto.

O que significa a mensagem de erro? Estou confuso por que o tipo de argumento esperado é_ -> _ (ou talvez eu simplesmente não saiba o que significa_ -> _ nesse caso). O objetivo desta pergunta é aprender a diagnosticar corretamente essa mensagem de erro, caso eu a encontre novamente no futuro.

O código:

Este código falha ao compilar com a mensagem de erro "Não é possível converter o valor do tipo 'A -> B' para o 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))
    }
}

Informação adicional:

No começo, presumi que o problema era com inferência de tipos, então tentei escrever os tipos explicitamente, mas isso também falhou:

No entanto, isso compila muito bem (a única diferença do meu originalmap&nbsp;versão é a<B>&nbsp;passado para oZipList&nbsp;inicializador):

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