functor
  (Sexpable : S1) (M : sig
                         type 'a t
                         val to_sexpable : 'a Sexpable.t -> 'a Sexpable.t
                         val of_sexpable : 'a Sexpable.t -> 'a Sexpable.t
                       end) ->
  sig
    val t_of_sexp : (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a M.t
    val sexp_of_t : ('a -> Sexplib.Sexp.t) -> 'a M.t -> Sexplib.Sexp.t
  end