“Using Circular Programs to Eliminate Multiple Traversals of Data”, 1984 ():
This paper describes a technique for transforming functional programs that repeatedly traverse a data structure into more efficient alternatives that do not [the
repminproblem].The transformation makes essential use of lazy evaluation and local recursion (such as provided by
letrec, or its equivalent) to build a circular program that, on one pass over the structure, determines the effects of the individual traversals and then combines them.