sig
  val __pa_ounit_275876e34cf609db118f3d84b799a790 : string
  module type S =
    sig
      type t
      val t_of_sexp : Sexplib.Sexp.t -> t
      val sexp_of_t : t -> Sexplib.Sexp.t
    end
  module type S1 =
    sig
      type 'a t
      val t_of_sexp : (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a t
      val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.t
    end
  module type S2 =
    sig
      type ('a, 'b) t
      val t_of_sexp :
        (Sexplib.Sexp.t -> 'a) ->
        (Sexplib.Sexp.t -> 'b) -> Sexplib.Sexp.t -> ('a, 'b) t
      val sexp_of_t :
        ('-> Sexplib.Sexp.t) ->
        ('-> Sexplib.Sexp.t) -> ('a, 'b) t -> Sexplib.Sexp.t
    end
  module type S3 =
    sig
      type ('a, 'b, 'c) t
      val t_of_sexp :
        (Sexplib.Sexp.t -> 'a) ->
        (Sexplib.Sexp.t -> 'b) ->
        (Sexplib.Sexp.t -> 'c) -> Sexplib.Sexp.t -> ('a, 'b, 'c) t
      val sexp_of_t :
        ('-> Sexplib.Sexp.t) ->
        ('-> Sexplib.Sexp.t) ->
        ('-> Sexplib.Sexp.t) -> ('a, 'b, 'c) t -> Sexplib.Sexp.t
    end
  module Of_sexpable :
    functor (S : S->
      functor
        (M : sig
               type t
               val to_sexpable : t -> S.t
               val of_sexpable : S.t -> t
             end->
        sig
          val t_of_sexp : Sexplib.Sexp.t -> M.t
          val sexp_of_t : M.t -> Sexplib.Sexp.t
        end
  module Of_stringable :
    functor (M : Stringable.S->
      sig
        val t_of_sexp : Sexplib.Sexp.t -> M.t
        val sexp_of_t : M.t -> Sexplib.Sexp.t
      end
  module To_stringable :
    functor (M : S->
      sig val of_string : string -> M.t val to_string : M.t -> string end
end