static IterableIterator scanLog_iterator(S progID, S fileName) { ret scanLog_iterator(getProgramFile(progID, fileName)); } static IterableIterator scanLog_iterator(S fileName) { ret scanLog_iterator(getProgramFile(fileName)); } static IterableIterator scanLog_iterator(File file) { // TODO: opens all at once final Iterator it = chainIterators(map linesFromFile( concatLists(earlierPartsOfLogFile(file), ll(file)))); ret iteratorFromFunction(func -> S { while (it.hasNext()) { S s = it.next(); if (isProperlyQuoted(s)) ret unquote(s); } null; }); }