module data.stream { constructor: end_of_file/0. input_stream = module { abstract: read/1. string(L) :- read(C), ( C = end_of_file -> L = [] ; L = [C | Tail], string(Tail) ). atom = data.string:atom(string). }. }