let fold_stream' ?(file="") ?(strict=true) f init cstr =
let lines = Stream.lines_of_chars cstr in
let f accum s =
try f accum s
with Failure msg ->
let n = Stream.count lines in
let pos = if file = "" then Pos.l n else Pos.fl file n in
if strict then raise_error pos msg else accum
in
Stream.fold f init lines