Astract iterators.
convert the progress return value to a string: None->"", Some->" 33%"
fold over the iterator: call f on each element and return the accumulator
create an iterator from an iterating function
create a progress function for an input channel
create an iterator that will read from file using f
call f on channel until End_of_file