Sat Jul 15 10:58:06 EDT 2017
Intersection between igen.erl and source.erl
Problem: can't turn a list into an igen without creating a separate
process. But it is possible to constrain the interface such that:
- reader will only "pop once".
- the "next" thunk is explicitly updated
How to guarantee single-use of the the "next" thunk? This doesn't
seem possible without storing state somehwere -- same problem as
implementing proper lazy evaluation.
So it's not possible to constrain this at run time. Can it be
expressed in types?
EDIT: no generic solution, so solve it in the implementation. I.e. if
a function uses the input souce in a "pop once" fashion, it can
manually convert an igen using igen:to_source_leaky/1 and guarantee
proper usage such as performing igen:close/1.