You're right. We'd want lazy evaluation here. The following did not work for me either:
```scala
def iterator2Spool[K, V](it: Iterator[(K, V)]): Spool[(K, V)] = {
  if (it.isEmpty) {
    Spool.empty[(K, V)]
  } else {
    Spool.cons(it.next, Future.value(iterator2Spool(it)))
  }
}
```
Maybe I'm missing something about Spool does deferred tails.