Module Migrate_parsetree.Versions

module Versions: Migrate_parsetree_versions

module type Ast = sig .. end
Abstract view of a version of an OCaml Ast
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
_types
= < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'x; toplevel_phrase : 'o;
type_declaration : 'p; type_extension : 'q >
get_structure
= 'x
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'x; structure : 'n; toplevel_phrase : 'o;
type_declaration : 'p; type_extension : 'q >
get_signature
= 'x
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'x;
type_declaration : 'p; type_extension : 'q >
get_toplevel_phrase
= 'x
type < case : 'a; core_type : 'x; expression : 'b; extension_constructor : 'c;
mapper : 'd; out_class_type : 'e; out_module_type : 'f; out_phrase : 'g;
out_sig_item : 'h; out_type : 'i; out_type_extension : 'j; out_value : 'k;
pattern : 'l; signature : 'm; structure : 'n; toplevel_phrase : 'o;
type_declaration : 'p; type_extension : 'q >
get_core_type
= 'x
type < case : 'a; core_type : 'b; expression : 'x; extension_constructor : 'c;
mapper : 'd; out_class_type : 'e; out_module_type : 'f; out_phrase : 'g;
out_sig_item : 'h; out_type : 'i; out_type_extension : 'j; out_value : 'k;
pattern : 'l; signature : 'm; structure : 'n; toplevel_phrase : 'o;
type_declaration : 'p; type_extension : 'q >
get_expression
= 'x
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'x; signature : 'm; structure : 'n; toplevel_phrase : 'o;
type_declaration : 'p; type_extension : 'q >
get_pattern
= 'x
type < case : 'x; core_type : 'a; expression : 'b; extension_constructor : 'c;
mapper : 'd; out_class_type : 'e; out_module_type : 'f; out_phrase : 'g;
out_sig_item : 'h; out_type : 'i; out_type_extension : 'j; out_value : 'k;
pattern : 'l; signature : 'm; structure : 'n; toplevel_phrase : 'o;
type_declaration : 'p; type_extension : 'q >
get_case
= 'x
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'x; type_extension : 'q >
get_type_declaration
= 'x
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'x >
get_type_extension
= 'x
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'x;
mapper : 'd; out_class_type : 'e; out_module_type : 'f; out_phrase : 'g;
out_sig_item : 'h; out_type : 'i; out_type_extension : 'j; out_value : 'k;
pattern : 'l; signature : 'm; structure : 'n; toplevel_phrase : 'o;
type_declaration : 'p; type_extension : 'q >
get_extension_constructor
= 'x
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'x;
pattern : 'l; signature : 'm; structure : 'n; toplevel_phrase : 'o;
type_declaration : 'p; type_extension : 'q >
get_out_value
= 'x
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'x; out_type_extension : 'j; out_value : 'k;
pattern : 'l; signature : 'm; structure : 'n; toplevel_phrase : 'o;
type_declaration : 'p; type_extension : 'q >
get_out_type
= 'x
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'x; out_module_type : 'f; out_phrase : 'g;
out_sig_item : 'h; out_type : 'i; out_type_extension : 'j; out_value : 'k;
pattern : 'l; signature : 'm; structure : 'n; toplevel_phrase : 'o;
type_declaration : 'p; type_extension : 'q >
get_out_class_type
= 'x
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'x; out_phrase : 'g;
out_sig_item : 'h; out_type : 'i; out_type_extension : 'j; out_value : 'k;
pattern : 'l; signature : 'm; structure : 'n; toplevel_phrase : 'o;
type_declaration : 'p; type_extension : 'q >
get_out_module_type
= 'x
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'x; out_type : 'i; out_type_extension : 'j; out_value : 'k;
pattern : 'l; signature : 'm; structure : 'n; toplevel_phrase : 'o;
type_declaration : 'p; type_extension : 'q >
get_out_sig_item
= 'x
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'x; out_value : 'k;
pattern : 'l; signature : 'm; structure : 'n; toplevel_phrase : 'o;
type_declaration : 'p; type_extension : 'q >
get_out_type_extension
= 'x
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'x;
out_sig_item : 'h; out_type : 'i; out_type_extension : 'j; out_value : 'k;
pattern : 'l; signature : 'm; structure : 'n; toplevel_phrase : 'o;
type_declaration : 'p; type_extension : 'q >
get_out_phrase
= 'x
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'x; out_class_type : 'e; out_module_type : 'f; out_phrase : 'g;
out_sig_item : 'h; out_type : 'i; out_type_extension : 'j; out_value : 'k;
pattern : 'l; signature : 'm; structure : 'n; toplevel_phrase : 'o;
type_declaration : 'p; type_extension : 'q >
get_mapper
= 'x
type '_ witnesses 
A version of the OCaml frontend packs the ast with type witnesses so that equalities can be recovered dynamically.
type '_ migration_info 
migration_info is an opaque type that is used to generate migration functions.
module type OCaml_version = sig .. end
An OCaml frontend versions an Ast, version number and some witnesses for conversion.
type < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
ocaml_version
= (module Migrate_parsetree_versions.OCaml_version with type Ast.Ast_mapper.mapper =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_mapper and type Ast.Outcometree.out_class_type =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_out_class_type and type Ast.Outcometree.out_module_type =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_out_module_type and type Ast.Outcometree.out_phrase =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_out_phrase and type Ast.Outcometree.out_sig_item =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_out_sig_item and type Ast.Outcometree.out_type =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_out_type and type Ast.Outcometree.out_type_extension =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_out_type_extension and type Ast.Outcometree.out_value =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_out_value and type Ast.Parsetree.case =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_case and type Ast.Parsetree.core_type =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_core_type and type Ast.Parsetree.expression =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_expression and type Ast.Parsetree.extension_constructor =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_extension_constructor and type Ast.Parsetree.pattern =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_pattern and type Ast.Parsetree.signature =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_signature and type Ast.Parsetree.structure =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_structure and type Ast.Parsetree.toplevel_phrase =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_toplevel_phrase and type Ast.Parsetree.type_declaration =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_type_declaration and type Ast.Parsetree.type_extension =
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_type_extension)
Representing an ocaml version in type language

Concrete frontend instances


module OCaml_402: OCaml_version  with module Ast = Ast_402
val ocaml_402 : OCaml_402.types
ocaml_version
module OCaml_403: OCaml_version  with module Ast = Ast_403
val ocaml_403 : OCaml_403.types
ocaml_version
module OCaml_404: OCaml_version  with module Ast = Ast_404
val ocaml_404 : OCaml_404.types
ocaml_version
module OCaml_405: OCaml_version  with module Ast = Ast_405
val ocaml_405 : OCaml_405.types
ocaml_version
module OCaml_406: OCaml_version  with module Ast = Ast_406
val ocaml_406 : OCaml_406.types
ocaml_version
module OCaml_407: OCaml_version  with module Ast = Ast_407
val ocaml_407 : OCaml_407.types
ocaml_version
module OCaml_current: OCaml_405
val ocaml_current : OCaml_current.types ocaml_version
val all_versions : (module Migrate_parsetree_versions.OCaml_version) list

Migrating between different versions


type ('a, 'b) type_comparison = 
| Lt : ('a0, 'b0) type_comparison
| Eq : ('a1, 'a1) type_comparison
| Gt : ('a2, 'b1) type_comparison
val compare_ocaml_version : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
ocaml_version ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
ocaml_version ->
(< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >,
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >)
type_comparison
type (< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
, < case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y;
out_phrase : 'z; out_sig_item : 'a1; out_type : 'b1;
out_type_extension : 'c1; out_value : 'd1; pattern : 'e1;
signature : 'f1; structure : 'g1; toplevel_phrase : 'h1;
type_declaration : 'i1; type_extension : 'j1 >)
migration_functions
= {
   copy_structure : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_structure ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_structure
;
   copy_signature : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_signature ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_signature
;
   copy_toplevel_phrase : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_toplevel_phrase ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_toplevel_phrase
;
   copy_core_type : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_core_type ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_core_type
;
   copy_expression : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_expression ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_expression
;
   copy_pattern : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_pattern ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_pattern
;
   copy_case : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_case ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_case
;
   copy_type_declaration : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_type_declaration ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_type_declaration
;
   copy_type_extension : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_type_extension ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_type_extension
;
   copy_extension_constructor : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_extension_constructor ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_extension_constructor
;
   copy_out_value : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_out_value ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_out_value
;
   copy_out_type : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_out_type ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_out_type
;
   copy_out_class_type : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_out_class_type ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_out_class_type
;
   copy_out_module_type : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_out_module_type ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_out_module_type
;
   copy_out_sig_item : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_out_sig_item ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_out_sig_item
;
   copy_out_type_extension : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_out_type_extension ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_out_type_extension
;
   copy_out_phrase : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_out_phrase ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_out_phrase
;
   copy_mapper : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
get_mapper ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
get_mapper
;
}
A record for migrating each AST construct between two known versions
val migration_identity : (< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >,
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >)
migration_functions
Migrating to the same version is no-op
val migration_compose : (< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >,
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >)
migration_functions ->
(< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >,
< case : 'k1; core_type : 'l1; expression : 'm1;
extension_constructor : 'n1; mapper : 'o1; out_class_type : 'p1;
out_module_type : 'q1; out_phrase : 'r1; out_sig_item : 's1;
out_type : 't1; out_type_extension : 'u1; out_value : 'v1; pattern : 'w1;
signature : 'x1; structure : 'y1; toplevel_phrase : 'z1;
type_declaration : 'a2; type_extension : 'b2 >)
migration_functions ->
(< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >,
< case : 'k1; core_type : 'l1; expression : 'm1;
extension_constructor : 'n1; mapper : 'o1; out_class_type : 'p1;
out_module_type : 'q1; out_phrase : 'r1; out_sig_item : 's1;
out_type : 't1; out_type_extension : 'u1; out_value : 'v1; pattern : 'w1;
signature : 'x1; structure : 'y1; toplevel_phrase : 'z1;
type_declaration : 'a2; type_extension : 'b2 >)
migration_functions
Migrations can be composed

Represent the next or previous version of an Ast
type 'from immediate_migration = 
| No_migration : 'from0 immediate_migration (*
Cannot migrate earliest or latest supported version
*)
| Immediate_migration : (< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >,
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >)
migration_functions
* < case : 's; core_type : 't; expression : 'u;
extension_constructor : 'v; mapper : 'w; out_class_type : 'x;
out_module_type : 'y; out_phrase : 'z; out_sig_item : 'a1;
out_type : 'b1; out_type_extension : 'c1; out_value : 'd1;
pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
ocaml_version
-> < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
immediate_migration
(*
Pack the migration functions and the new version
*)
val immediate_migration : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
ocaml_version ->
[< `Next | `Previous ] ->
< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
immediate_migration
val migrate : < case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >
ocaml_version ->
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >
ocaml_version ->
(< case : 'a; core_type : 'b; expression : 'c; extension_constructor : 'd;
mapper : 'e; out_class_type : 'f; out_module_type : 'g; out_phrase : 'h;
out_sig_item : 'i; out_type : 'j; out_type_extension : 'k; out_value : 'l;
pattern : 'm; signature : 'n; structure : 'o; toplevel_phrase : 'p;
type_declaration : 'q; type_extension : 'r >,
< case : 's; core_type : 't; expression : 'u; extension_constructor : 'v;
mapper : 'w; out_class_type : 'x; out_module_type : 'y; out_phrase : 'z;
out_sig_item : 'a1; out_type : 'b1; out_type_extension : 'c1;
out_value : 'd1; pattern : 'e1; signature : 'f1; structure : 'g1;
toplevel_phrase : 'h1; type_declaration : 'i1; type_extension : 'j1 >)
migration_functions

Convenience definitions


module Convert: 
functor (A : OCaml_version) ->
functor (B : OCaml_version) -> sig .. end
Module level migration