sig
  val param : Camlp4.PreCast.Ast.ctyp -> string * [> `Minus | `Plus ] option
  val params :
    Camlp4.PreCast.Ast.ctyp list ->
    (string * [> `Minus | `Plus ] option) list
  val split_and :
    Camlp4.PreCast.Ast.ctyp ->
    (Camlp4.PreCast.Ast.ctyp * Camlp4.PreCast.Ast.ctyp,
     Camlp4.PreCast.Ast.ctyp)
    Utils.either
  val split_comma :
    Camlp4.PreCast.Ast.ctyp ->
    (Camlp4.PreCast.Ast.ctyp * Camlp4.PreCast.Ast.ctyp,
     Camlp4.PreCast.Ast.ctyp)
    Utils.either
  val split_semi :
    Camlp4.PreCast.Ast.ctyp ->
    (Camlp4.PreCast.Ast.ctyp * Camlp4.PreCast.Ast.ctyp,
     Camlp4.PreCast.Ast.ctyp)
    Utils.either
  val split_or :
    Camlp4.PreCast.Ast.ctyp ->
    (Camlp4.PreCast.Ast.ctyp * Camlp4.PreCast.Ast.ctyp,
     Camlp4.PreCast.Ast.ctyp)
    Utils.either
  val split_amp :
    Camlp4.PreCast.Ast.ctyp ->
    (Camlp4.PreCast.Ast.ctyp * Camlp4.PreCast.Ast.ctyp,
     Camlp4.PreCast.Ast.ctyp)
    Utils.either
  val split_ofamp :
    Camlp4.PreCast.Ast.ctyp ->
    (Camlp4.PreCast.Ast.ctyp * Camlp4.PreCast.Ast.ctyp,
     Camlp4.PreCast.Ast.ctyp)
    Utils.either
  val split_star :
    Camlp4.PreCast.Ast.ctyp ->
    (Camlp4.PreCast.Ast.ctyp * Camlp4.PreCast.Ast.ctyp,
     Camlp4.PreCast.Ast.ctyp)
    Utils.either
  val list :
    (Camlp4.PreCast.Ast.ctyp -> 'a) ->
    (Camlp4.PreCast.Ast.ctyp ->
     (Camlp4.PreCast.Ast.ctyp * Camlp4.PreCast.Ast.ctyp,
      Camlp4.PreCast.Ast.ctyp)
     Utils.either) ->
    Camlp4.PreCast.Ast.ctyp -> 'a list
  val ident : Camlp4.PreCast.Ast.ident -> Type.name
  val qident : Camlp4.PreCast.Ast.ident -> Type.qname
  type vmap = (Type.name * Type.variant * Type.name option) list
  val fresh_name : unit -> string
  val set_name_prefix : Type.name -> unit
  module WithParams :
    functor (P : sig val params : Type.param list end->
      sig
        val params : Type.param list
        val apply_t :
          '-> [> `Constr of 'a list * [> `Param of Type.param ] list ]
        val expr : Camlp4.PreCast.Ast.ctyp -> Type.expr * Type.Translate.vmap
        val tagspec :
          Camlp4.PreCast.Ast.ctyp -> Type.tagspec * Type.Translate.vmap
        val application :
          Camlp4.PreCast.Ast.ctyp ->
          (Type.qname * Type.expr list) * Type.Translate.vmap
        val variant :
          Camlp4.PreCast.Ast.ctyp ->
          ?alias:Type.name ->
          [ `Eq | `Gt | `Lt ] -> Type.expr * Type.Translate.vmap
        val polyexpr :
          Camlp4.PreCast.Ast.ctyp -> Type.poly_expr * Type.Translate.vmap
        val field :
          Camlp4.PreCast.Ast.ctyp -> Type.field * Type.Translate.vmap
        val summand :
          Camlp4.PreCast.Ast.ctyp -> Type.summand * Type.Translate.vmap
        val repr :
          Camlp4.PreCast.Ast.ctyp ->
          Type.repr * (Type.name * Type.variant * Type.name option) list
        val toplevel :
          Camlp4.PreCast.Ast.ctyp -> Type.rhs * Type.Translate.vmap
        val constraints :
          (Camlp4.PreCast.Ast.ctyp * Camlp4.PreCast.Ast.ctyp) list ->
          Type.constraint_ list * Type.Translate.vmap
        val declify :
          (Type.name * Type.variant * Type.name option) list ->
          (Type.decl * (Type.name * Type.expr) option) list
      end
  type alias_map = Type.expr Type.NameMap.t
  val build_alias_map :
    (Type.NameMap.key * Type.expr) option list -> Type.Translate.alias_map
  val split : Camlp4.PreCast.Ast.ctyp -> Camlp4.PreCast.Ast.ctyp list
  val decl :
    Camlp4.PreCast.Ast.ctyp -> Type.decl list * Type.Translate.alias_map
  val substitute_aliases : Type.Translate.alias_map -> Type.decl -> Type.decl
  val decls : Camlp4.PreCast.Ast.ctyp -> Type.decl list
end