Varieties of laziness: clojure reducers, scala views and closure functors
This is very cool.
(Thanks to David Nolen, who pointed out errors in the original.)
I hadn't realized that the standard higher order sequence functions compose in a manner
that requires quite a bit of run-time machinery. For example nested map
calls will cause
a separate lazy sequence to be instantiated at each level of nesting, with each level
"pulling" results from the next innermost as needed. The function calls are thus temporally
interleaved, but the functions are not actually composed. We can see this happening by
adding some println
s to some unary functions and then running a nested …