racket-collections icon indicating copy to clipboard operation
racket-collections copied to clipboard

Range does not return a known finite sequence

Open countvajhula opened this issue 2 years ago • 0 comments

At the moment, Racket's in-range is simply re-provided as range. As this doesn't encode known finiteness, it results in unexpected behavior when used with other APIs:

(empty? (range 0)) ;=> #t
(empty? (take 5 (range 0))) ;=> #f
(length (take 5 (range 3))) ;=> 5

This happens because take and drop return bounded sequences without forcing the input sequence if it isn't known-finite?. For range, this means that it returns a bounded sequence of length 5 (in the above example) even though the input is actually known finite and of length 3.

Suggested fix: Wrap in-range with a sequence that implements gen:countable and always returns true for known-finite?.

countvajhula avatar Mar 29 '22 00:03 countvajhula