sig
  module type SExprAtom =
    sig
      type t
      val pp_print_atom : Format.formatter -> SExprBase.SExprAtom.t -> unit
    end
  module type S =
    sig
      type atom
      type t = Atom of SExprBase.S.atom | List of SExprBase.S.t list
      val pp_print_sexpr : Format.formatter -> SExprBase.S.t -> unit
      val pp_print_sexpr_list :
        Format.formatter -> SExprBase.S.t list -> unit
      val print_sexpr : SExprBase.S.t -> unit
      val pp_print_sexpr_indent :
        int -> Format.formatter -> SExprBase.S.t -> unit
      val pp_print_sexpr_indent_compact :
        int -> Format.formatter -> SExprBase.S.t -> unit
      val string_of_sexpr : SExprBase.S.t -> string
    end
  module Make :
    functor (Atom : SExprAtom->
      sig
        type atom = Atom.t
        type t = Atom of atom | List of t list
        val pp_print_sexpr : Format.formatter -> t -> unit
        val pp_print_sexpr_list : Format.formatter -> t list -> unit
        val print_sexpr : t -> unit
        val pp_print_sexpr_indent : int -> Format.formatter -> t -> unit
        val pp_print_sexpr_indent_compact :
          int -> Format.formatter -> t -> unit
        val string_of_sexpr : t -> string
      end
end