I am pretty sure Racket's `stream` will handle this use case.
https://docs.racket-lang.org/reference/streams.html