///|
/// Returns an iterator that calls `make` only when its first element is
/// requested, like the body of a Python generator function.
fn[T] deferred(make : () -> Iter[T]) -> Iter[T] {
let mut inner : Iter[T]? = None
Iter::new(() => {
let it = match inner {
Some(it) => it
None => {
let it = make()
inner = Some(it)
it
}
}
it.next()
})
}