sig
  type 'a t = 'CCLazy_list.node lazy_t
  and 'a node = Nil | Cons of 'a * 'CCLazy_list.t
  val empty : 'CCLazy_list.t
  val return : '-> 'CCLazy_list.t
  val is_empty : 'CCLazy_list.t -> bool
  val length : 'CCLazy_list.t -> int
  val cons : '-> 'CCLazy_list.t -> 'CCLazy_list.t
  val head : 'CCLazy_list.t -> ('a * 'CCLazy_list.t) option
  val map : f:('-> 'b) -> 'CCLazy_list.t -> 'CCLazy_list.t
  val filter : f:('-> bool) -> 'CCLazy_list.t -> 'CCLazy_list.t
  val take : int -> 'CCLazy_list.t -> 'CCLazy_list.t
  val append : 'CCLazy_list.t -> 'CCLazy_list.t -> 'CCLazy_list.t
  val flat_map :
    f:('-> 'CCLazy_list.t) -> 'CCLazy_list.t -> 'CCLazy_list.t
  module Infix :
    sig
      val ( >|= ) : 'CCLazy_list.t -> ('-> 'b) -> 'CCLazy_list.t
      val ( >>= ) :
        'CCLazy_list.t -> ('-> 'CCLazy_list.t) -> 'CCLazy_list.t
    end
  val ( >|= ) : 'a t -> ('-> 'b) -> 'b t
  val ( >>= ) : 'a t -> ('-> 'b t) -> 'b t
  type 'a gen = unit -> 'a option
  val of_gen : 'CCLazy_list.gen -> 'CCLazy_list.t
  val of_list : 'a list -> 'CCLazy_list.t
  val to_list : 'CCLazy_list.t -> 'a list
  val to_list_rev : 'CCLazy_list.t -> 'a list
  val to_gen : 'CCLazy_list.t -> 'CCLazy_list.gen
end