Legend:
Library
Module
Module type
Parameter
Class
Class type
Library
Module
Module type
Parameter
Class
Class type
This interface is designed to make it easy to build complex streams of values in a way that resembles Python's generators (using "yield").
let naturals : int OSeq.t = OSeq.Generator.(
let rec aux n = yield n >>= fun () -> aux (n+1) in
run (aux 0)
)
type 'a tree = E | N of 'a tree * 'a * 'a tree
let traverse (t:'a tree) : 'a OSeq.t =
let open OSeq.Generator in
let rec trav = function
| E -> empty
| N (l,v,r) -> trav l >>= fun () -> yield v >>= fun () -> trav r
in
run (trav t)
Type for writing generators (of type 'a OSeq.Generator.t
) that can be used to construct an iterator of type 'a OSeq.t
val empty : 'a t
Empty generator, yields no value
val yield : 'a -> 'a t
Yield one value
gen1 >>= fun () -> gen2
first yields all values from gen1
, and then all values from gen2