# Module Pa_type_conv

    module Pa_type_conv: sig .. end

Pa_type_conv: Preprocessing Module for Registering Type Conversions

Generator registration

    val set_conv_path_if_not_set : Camlp4.PreCast.Ast.Loc.t -> unit

`set_conv_path_if_not_set loc` sets the path to the file/module being converted for improved error messages.

    val get_conv_path : unit -> string

`get_conv_path ()`

- Returns the name to module containing a type as required for error messages.

    val add_generator : ?is_exn:bool ->
           string ->
           (bool -> Camlp4.PreCast.Ast.ctyp -> Camlp4.PreCast.Ast.str_item) -> unit

`add_generator ?is_exn name gen` adds the code generator `gen`, which maps type or exception declarations to structure items, where `is_exn` specifies whether the declaration is an exception. Note that the original type/exception declarations get added automatically in any case.

`is_exn` : = `false`

    val add_generator_with_arg : ?is_exn:bool ->
           string ->
           'a Camlp4.PreCast.Gram.Entry.t ->
           ('a option -> bool -> Camlp4.PreCast.Ast.ctyp -> Camlp4.PreCast.Ast.str_item) ->
           unit

`add_generator_with_arg ?is_exn name entry generator` same as `add_generator`, but the generator may accept an argument, which is parsed with `entry`.

    val rm_generator : ?is_exn:bool -> string -> unit

`rm_generator ?is_exn name` removes the code generator named `name` for types if `is_exn` is `false`, or exceptions otherwise.

`is_exn` : = `false`

    val add_sig_generator : ?delayed:bool ->
           ?is_exn:bool ->
           string ->
           (bool -> Camlp4.PreCast.Ast.ctyp -> Camlp4.PreCast.Ast.sig_item) -> unit

`add_sig_generator ?delayed ?is_exn name gen` adds the code generator `gen`, which maps type or exception declarations to signature items, where `is_exn` specifies whether the declaration is an exception. Note that the original type/exception declarations get added automatically in any case. If `delayed` is set to true, the output of this generator is appended to the signature in which it's defined

`delayed` : = `false`
`is_exn` : = `false`

    val add_sig_generator_with_arg : ?delayed:bool ->
           ?is_exn:bool ->
           string ->
           'a Camlp4.PreCast.Gram.Entry.t ->
           ('a option -> bool -> Camlp4.PreCast.Ast.ctyp -> Camlp4.PreCast.Ast.sig_item) ->
           unit

`add_sig_generator_with_arg ?delayed ?is_exn name entry generator` same as `add_sig_generator`, but the generator may accept an argument, which is parsed with `entry`.

    val rm_sig_generator : ?is_exn:bool -> string -> unit

`rm_sig_generator ?is_exn name` removes the signature code generator named `name` for types if `is_exn` is `false`, or exceptions otherwise.

`is_exn` : = `false`

    type record_field_generator = Camlp4.PreCast.Ast.ctyp -> unit

Type of record field code generators

    val add_record_field_generator : string -> record_field_generator -> unit

`add_record_field_generator gen_name gen` adds the record field code generator `gen` with name `gen_name`, which acts on the location identifying the record field.

    val add_record_field_generator_with_arg : string ->
           'a Camlp4.PreCast.Gram.Entry.t ->
           ('a option -> record_field_generator) -> unit

`add_record_field_generator_with_arg name entry generator` same as `add_record_field_generator`, but the `generator` takes an argument, which is parsed with `entry`. If `None` is passed to the generator, parsing of the argument failed, otherwise `Some arg` will be passed, where `arg` is the successfully parsed argument.

    val rm_record_field_generator : string -> unit

`rm_record_field_generator name` removes the record field code generator named `name`.

Generator sets registration

    val add_sig_set : ?is_exn:bool -> string -> set:string list -> unit

`add_sig_set ?is_exn id ~set` adds the generator `id` to the list of generators for signatures. This generator will behave as if is all the generators from `set` had been given instead. Any duplicate arising from repeatedly expanding such generators are removed. If `is_exn`, then it is a generator for exception declaration, or else it is a generator for type declaration.

    val add_str_set : ?is_exn:bool -> string -> set:string list -> unit

`add_str_set ?is_exn id ~set` behaves exactly like `add_sig_set ?is_exn id ~set` but for structure items instead of signatures items.

    val add_set : kind:[ `Both | `Sig | `Str ] ->
           is_exn:[ `Both | `No | `Yes ] -> string -> set:string list -> unit

`add_set ~kind ~is_exn id ~set` is a shorthand for doing multiple calls to `add_str_set` and `add_sig_set`

Utility functions

    val get_loc_err : Camlp4.PreCast.Ast.Loc.t -> string -> string

`get_loc_err loc msg` generates a compile-time error message.

    val hash_variant : string -> int

`hash_variant str`

- Returns the integer encoding a variant tag with name `str`.

General purpose code generation module

    module Gen: sig .. end

Utility functions to rewrite type definitions

    module Rewrite_tds: sig .. end