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
versão é a<B>
passado para oZipList
inicializador):
func map4<B>(f: A -> B) -> ZipList<B> {
return ZipList<B>(xs: self.xs.map(f))
}