10 Dec
2001
10 Dec
'01
3:04 p.m.
Well, how about the following little circular program?
paths :: () -> [Path] paths () = let r = T : branch r in r
As far as I can understand what you are looking for, I think this meets the bill. Every use of the expression `paths ()' will re-evaluate the infinite structure to the extent its context requires it, and the expanded value will be thrown away as soon as the value of this instance of `paths ()' is no longer required.
You can't rely on adding dummy arguments to cause re-evaluation: full-laziness (enabled when optimisation is on in GHC) will do the opposite transformation. Cheers, Simon