sig
  type 'a sequence = ('a -> unit) -> unit
  type 'a gen = unit -> 'a option
  type 'a klist = unit -> [ `Cons of 'a * 'a CCKTree.klist | `Nil ]
  type 'a printer = Format.formatter -> 'a -> unit
  type 'a t = unit -> [ `Nil | `Node of 'a * 'a CCKTree.t list ]
  val empty : 'a CCKTree.t
  val is_empty : 'a CCKTree.t -> bool
  val singleton : 'a -> 'a CCKTree.t
  val node : 'a -> 'a CCKTree.t list -> 'a CCKTree.t
  val node1 : 'a -> 'a CCKTree.t -> 'a CCKTree.t
  val node2 : 'a -> 'a CCKTree.t -> 'a CCKTree.t -> 'a CCKTree.t
  val fold : ('a -> 'b -> 'a) -> 'a -> 'b CCKTree.t -> 'a
  val iter : ('a -> unit) -> 'a CCKTree.t -> unit
  val size : 'a CCKTree.t -> int
  val height : 'a CCKTree.t -> int
  val map : ('a -> 'b) -> 'a CCKTree.t -> 'b CCKTree.t
  val ( >|= ) : 'a CCKTree.t -> ('a -> 'b) -> 'b CCKTree.t
  val cut_depth : int -> 'a CCKTree.t -> 'a CCKTree.t
  class type ['a] pset =
    object method add : 'a -> 'a CCKTree.pset method mem : 'a -> bool end
  val set_of_cmp : ?cmp:('a -> 'a -> int) -> unit -> 'a CCKTree.pset
  val dfs :
    ?pset:'a CCKTree.pset ->
    'a CCKTree.t -> [ `Enter of 'a | `Exit of 'a ] CCKTree.klist
  val bfs : ?pset:'a CCKTree.pset -> 'a CCKTree.t -> 'a CCKTree.klist
  val force : 'a CCKTree.t -> ([ `Nil | `Node of 'a * 'b list ] as 'b)
  val find :
    ?pset:'a CCKTree.pset -> ('a -> 'b option) -> 'a CCKTree.t -> 'b option
  val pp : 'a CCKTree.printer -> 'a CCKTree.t CCKTree.printer
  module Dot :
    sig
      type attribute =
          [ `Color of string
          | `Id of string
          | `Label of string
          | `Other of string * string
          | `Shape of string
          | `Style of string
          | `Weight of int ]
      type graph = string * CCKTree.Dot.attribute list CCKTree.t list
      val mk_id :
        ('a, Buffer.t, unit, CCKTree.Dot.attribute) Pervasives.format4 -> 'a
      val mk_label :
        ('a, Buffer.t, unit, CCKTree.Dot.attribute) Pervasives.format4 -> 'a
      val make :
        name:string ->
        CCKTree.Dot.attribute list CCKTree.t list -> CCKTree.Dot.graph
      val singleton :
        name:string ->
        CCKTree.Dot.attribute list CCKTree.t -> CCKTree.Dot.graph
      val pp_single :
        string -> CCKTree.Dot.attribute list CCKTree.t CCKTree.printer
      val pp : CCKTree.Dot.graph CCKTree.printer
      val print_to_file : string -> CCKTree.Dot.graph -> unit
      val to_file :
        ?name:string ->
        string -> CCKTree.Dot.attribute list CCKTree.t list -> unit
    end
end