ocaml_datatype_polymorphic-variant.md
# (* preparation *);;
# open Kxclib;;
# open Doctests_utils.Test_utils;;
simple polymorphic variant type : int_or_string
# open Bindoj.Type_desc;;
# open Bindoj.Caml_gen;;
# open Bindoj.Caml_gen.Datatype;;
# let int_or_string_desc =
variant_decl "int_or_string" [
variant_constructor "int" (`tuple_like [variant_argument @@ Coretype.mk_prim `int]);
variant_constructor "string" (`tuple_like [variant_argument @@ Coretype.mk_prim `string]);
] ~configs:[
Caml_config.variant_type `polymorphic
];;
val int_or_string_desc : type_decl =
{td_name = "int_or_string";
td_configs =
Bindoj.Type_desc.Configs.(::)
(Bindoj_typedesc.Type_desc.Config_caml_variant_type `polymorphic,
Bindoj.Type_desc.Configs.[]);
td_kind =
Variant_decl
[{vc_name = "int";
vc_param =
`tuple_like
[{va_type =
`direct
{Bindoj.Type_desc.Coretype.ct_desc =
Bindoj.Type_desc.Coretype.Prim `int;
ct_configs = Bindoj_typedesc.Type_desc.Configs.[]};
va_configs = Bindoj.Type_desc.Configs.[]; va_doc = `nodoc}];
vc_configs = Bindoj.Type_desc.Configs.[]; vc_doc = `nodoc};
{vc_name = "string";
vc_param =
`tuple_like
[{va_type =
`direct
{Bindoj.Type_desc.Coretype.ct_desc =
Bindoj.Type_desc.Coretype.Prim `string;
ct_configs = Bindoj_typedesc.Type_desc.Configs.[]};
va_configs = Bindoj.Type_desc.Configs.[]; va_doc = `nodoc}];
vc_configs = Bindoj.Type_desc.Configs.[]; vc_doc = `nodoc}];
td_doc = `nodoc}
# Bindoj.(
let int_or_string_decl = Caml_gen.Datatype.type_declaration_of_type_decl int_or_string_desc in
Caml.Structure.([declaration int_or_string_decl] |> printf "%a@?" pp_caml));;
type int_or_string = [ `int of int | `string of string ]
- : unit = ()