unfold
object Collection {
def unfold[A, S](s: S)(f: (S) => Option[(A, S)]): Collection[A]
}
unfold cria uma coleção pegando cada par de valores retornados pela função f para obter o item atual e calcular o próximo, enquanto a função os devolve envolvidos com Some.
Pare de criar a coleção assim que f retornar None.
A primeira vez que f é aplicado, ele é alimentado com o valor inicial s.