sig
  type t = [ `Atom of string | `List of CCSexp.t list ]
  val equal : CCSexp.t -> CCSexp.t -> bool
  val compare : CCSexp.t -> CCSexp.t -> int
  val hash : CCSexp.t -> int
  val atom : string -> CCSexp.t
  val of_int : int -> CCSexp.t
  val of_bool : bool -> CCSexp.t
  val of_list : CCSexp.t list -> CCSexp.t
  val of_rev_list : CCSexp.t list -> CCSexp.t
  val of_float : float -> CCSexp.t
  val of_unit : CCSexp.t
  val of_pair : CCSexp.t * CCSexp.t -> CCSexp.t
  val of_triple : CCSexp.t * CCSexp.t * CCSexp.t -> CCSexp.t
  val of_quad : CCSexp.t * CCSexp.t * CCSexp.t * CCSexp.t -> CCSexp.t
  val of_variant : string -> CCSexp.t list -> CCSexp.t
  val of_field : string -> CCSexp.t -> CCSexp.t
  val of_record : (string * CCSexp.t) list -> CCSexp.t
  module Traverse :
    sig
      type 'a conv = CCSexp.t -> 'a option
      val map_opt : ('-> 'b option) -> 'a list -> 'b list option
      val list_any : 'CCSexp.Traverse.conv -> CCSexp.t -> 'a option
      val list_all : 'CCSexp.Traverse.conv -> CCSexp.t -> 'a list
      val to_int : int CCSexp.Traverse.conv
      val to_string : string CCSexp.Traverse.conv
      val to_bool : bool CCSexp.Traverse.conv
      val to_float : float CCSexp.Traverse.conv
      val to_list : CCSexp.t list CCSexp.Traverse.conv
      val to_list_with :
        (CCSexp.t -> 'a option) -> 'a list CCSexp.Traverse.conv
      val to_pair : (CCSexp.t * CCSexp.t) CCSexp.Traverse.conv
      val to_pair_with :
        'CCSexp.Traverse.conv ->
        'CCSexp.Traverse.conv -> ('a * 'b) CCSexp.Traverse.conv
      val to_triple : (CCSexp.t * CCSexp.t * CCSexp.t) CCSexp.Traverse.conv
      val to_triple_with :
        'CCSexp.Traverse.conv ->
        'CCSexp.Traverse.conv ->
        'CCSexp.Traverse.conv -> ('a * 'b * 'c) CCSexp.Traverse.conv
      val get_field : string -> CCSexp.t CCSexp.Traverse.conv
      val field :
        string -> 'CCSexp.Traverse.conv -> 'CCSexp.Traverse.conv
      val get_variant :
        (string * (CCSexp.t list -> 'a option)) list ->
        'CCSexp.Traverse.conv
      val field_list :
        string -> (CCSexp.t list -> 'a option) -> 'CCSexp.Traverse.conv
      val ( >>= ) : 'a option -> ('-> 'b option) -> 'b option
      val ( >|= ) : 'a option -> ('-> 'b) -> 'b option
      val return : '-> 'a option
      val get_exn : 'a option -> 'a
    end
end