sig
  module Make :
    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
  module Parsed : Make(Src_pos.Absolute).S
  type t =
      Atom of Src_pos.Relative.t * string * string option
    | List of Src_pos.Relative.t * t_or_comment list * Src_pos.Relative.t
  and t_or_comment = Sexp of t | Comment of comment
  and comment =
      Plain_comment of Src_pos.Relative.t * string
    | Sexp_comment of Src_pos.Relative.t * comment list * t
  val sexp_of_t : t -> Type.t
  val sexp_of_comment : comment -> Type.t
  val sexp_of_t_or_comment : t_or_comment -> Type.t
  val relativize : Parsed.t_or_comment -> t_or_comment
end