sig
  type _ tag =
      Tag :
        ('variant, 'a) Variant_and_record_intf.M.Tag.t -> 'variant
                                                          Variant_and_record_intf.M.Variant_internal.tag
  type _ value =
      Value : ('variant, 'a) Variant_and_record_intf.M.Tag.t *
        'a -> 'variant Variant_and_record_intf.M.Variant_internal.value
  type 'a t = {
    typename : 'a Typename.t;
    tags : 'a Variant_and_record_intf.M.Variant_internal.tag array;
    polymorphic : bool;
    value : 'a -> 'a Variant_and_record_intf.M.Variant_internal.value;
  }
end