Что является причиной ошибки этого типа?

Два вопроса:

Почему этот код не компилируется? яверить (но я не уверен на 100%, возможно, я ошибся), что это типо-корректно.

Что означает сообщение об ошибке? Я запутался, почему ожидаемый тип аргумента_ -> _ (или, может быть, я просто не знаю, что это значит_ -> _ в этом случае). Цель этого вопроса - научиться правильно диагностировать это сообщение об ошибке, если я столкнусь с ним снова в будущем.

Код:

Этот код не может быть скомпилирован с сообщением об ошибке «Невозможно преобразовать значение типа« A -> B »в ожидаемый тип аргумента« _ -> _ »:

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

Дополнительная информация:

Сначала я предположил, что проблема связана с выводом типа, поэтому я попытался записать типы явно, но это также не удалось:

Однако это компилируется просто отлично (единственное отличие от моего оригиналаmap версия является<B> перешел кZipList инициализатор):

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

Ответы на вопрос(1)

Ваш ответ на вопрос