# Module Type.Translate

    module Translate: sig .. end

    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 .. end

    type alias_map = Type.expr Type.NameMap.t

    val build_alias_map : (Type.NameMap.key * Type.expr) option list -> alias_map

    val split : Camlp4.PreCast.Ast.ctyp -> Camlp4.PreCast.Ast.ctyp list

    val decl : Camlp4.PreCast.Ast.ctyp -> Type.decl list * alias_map

    val substitute_aliases : alias_map -> Type.decl -> Type.decl

    val decls : Camlp4.PreCast.Ast.ctyp -> Type.decl list