Search code examples
ocamlbacktrackinglazylist

What OCaml libraries are there for lazy list handling?


What OCaml libraries are out there that provide lazy list handling? I am looking for something along these lines:

type 'a lazy_list = (*'*)
  | Nil
  | Cons of 'a * 'a lazy_list lazy_t

let from f = 
  let rec gen n = 
    lazy 
      (
        match f n with 
          | Some x ->
              Cons (x, gen (n + 1))
          | None ->
              Nil
      )
  in 
    gen 0

Integration with the Stream type and syntactic sugar for backtracking Camlp4 parsers would be nice.


Solution

  • Ocaml Batteries has a lazy list module, check out the to_stream function. As for backtracking, you can look into camlp4's stream parsers now that you have a Stream.t .