functor
  (Pos : sig type t val sexp_of_t : Type_with_layout.Make.t -> Type.t end->
  sig
    module type S =
      sig
        type t =
            Atom of Pos.t * string * string option
          | List of Pos.t * Type_with_layout.Make.S.t_or_comment list * Pos.t
        and t_or_comment =
            Sexp of Type_with_layout.Make.S.t
          | Comment of Type_with_layout.Make.S.comment
        and comment =
            Plain_comment of Pos.t * string
          | Sexp_comment of Pos.t * Type_with_layout.Make.S.comment list *
              Type_with_layout.Make.S.t
        val sexp_of_t : Type_with_layout.Make.S.t -> Type.t
        val sexp_of_comment : Type_with_layout.Make.S.comment -> Type.t
        val sexp_of_t_or_comment :
          Type_with_layout.Make.S.t_or_comment -> Type.t
      end
  end