let of_filename experimental filename =   let l = String.length filename in   let i = Input.create_bytes 128 in   let rec aux consumed = function     | Parser.Fail _ -> None     | Parser.Read { buffer; k; } ->       let n = min 128 (l - consumed) in       Input.write_string buffer filename consumed n;       aux (consumed + n) @@ k n (if n = 0 then Parser.Complete else Parser.Incomplete)     | Parser.Done v -> Some v   in   aux 0 @@ Parser.run i (parse experimental)