Reminds me of… Lazy - fun project exploring lazy sequences in Erlang
The API of lazy
is generally more verbose than yours, but I think it is a better solution towards lazyness in general. Which may mean it is over-engineered, too, since what do you want to really use lazy stuff for other than reading/processing potentially huge files or databases, which is what your lib does?