sig
  type out_ident =
      Oide_apply of Ast_404.Outcometree.out_ident *
        Ast_404.Outcometree.out_ident
    | Oide_dot of Ast_404.Outcometree.out_ident * string
    | Oide_ident of string
  type out_attribute = { oattr_name : string; }
  type out_value =
      Oval_array of Ast_404.Outcometree.out_value list
    | Oval_char of char
    | Oval_constr of Ast_404.Outcometree.out_ident *
        Ast_404.Outcometree.out_value list
    | Oval_ellipsis
    | Oval_float of float
    | Oval_int of int
    | Oval_int32 of int32
    | Oval_int64 of int64
    | Oval_nativeint of nativeint
    | Oval_list of Ast_404.Outcometree.out_value list
    | Oval_printer of (Format.formatter -> unit)
    | Oval_record of
        (Ast_404.Outcometree.out_ident * Ast_404.Outcometree.out_value) list
    | Oval_string of string
    | Oval_stuff of string
    | Oval_tuple of Ast_404.Outcometree.out_value list
    | Oval_variant of string * Ast_404.Outcometree.out_value option
  type out_type =
      Otyp_abstract
    | Otyp_open
    | Otyp_alias of Ast_404.Outcometree.out_type * string
    | Otyp_arrow of string * Ast_404.Outcometree.out_type *
        Ast_404.Outcometree.out_type
    | Otyp_class of bool * Ast_404.Outcometree.out_ident *
        Ast_404.Outcometree.out_type list
    | Otyp_constr of Ast_404.Outcometree.out_ident *
        Ast_404.Outcometree.out_type list
    | Otyp_manifest of Ast_404.Outcometree.out_type *
        Ast_404.Outcometree.out_type
    | Otyp_object of (string * Ast_404.Outcometree.out_type) list *
        bool option
    | Otyp_record of (string * bool * Ast_404.Outcometree.out_type) list
    | Otyp_stuff of string
    | Otyp_sum of
        (string * Ast_404.Outcometree.out_type list *
         Ast_404.Outcometree.out_type option)
        list
    | Otyp_tuple of Ast_404.Outcometree.out_type list
    | Otyp_var of bool * string
    | Otyp_variant of bool * Ast_404.Outcometree.out_variant * bool *
        string list option
    | Otyp_poly of string list * Ast_404.Outcometree.out_type
    | Otyp_module of string * string list * Ast_404.Outcometree.out_type list
    | Otyp_attribute of Ast_404.Outcometree.out_type *
        Ast_404.Outcometree.out_attribute
  and out_variant =
      Ovar_fields of (string * bool * Ast_404.Outcometree.out_type list) list
    | Ovar_name of Ast_404.Outcometree.out_ident *
        Ast_404.Outcometree.out_type list
  type out_class_type =
      Octy_constr of Ast_404.Outcometree.out_ident *
        Ast_404.Outcometree.out_type list
    | Octy_arrow of string * Ast_404.Outcometree.out_type *
        Ast_404.Outcometree.out_class_type
    | Octy_signature of Ast_404.Outcometree.out_type option *
        Ast_404.Outcometree.out_class_sig_item list
  and out_class_sig_item =
      Ocsg_constraint of Ast_404.Outcometree.out_type *
        Ast_404.Outcometree.out_type
    | Ocsg_method of string * bool * bool * Ast_404.Outcometree.out_type
    | Ocsg_value of string * bool * bool * Ast_404.Outcometree.out_type
  type out_module_type =
      Omty_abstract
    | Omty_functor of string * Ast_404.Outcometree.out_module_type option *
        Ast_404.Outcometree.out_module_type
    | Omty_ident of Ast_404.Outcometree.out_ident
    | Omty_signature of Ast_404.Outcometree.out_sig_item list
    | Omty_alias of Ast_404.Outcometree.out_ident
  and out_sig_item =
      Osig_class of bool * string * (string * (bool * bool)) list *
        Ast_404.Outcometree.out_class_type *
        Ast_404.Outcometree.out_rec_status
    | Osig_class_type of bool * string * (string * (bool * bool)) list *
        Ast_404.Outcometree.out_class_type *
        Ast_404.Outcometree.out_rec_status
    | Osig_typext of Ast_404.Outcometree.out_extension_constructor *
        Ast_404.Outcometree.out_ext_status
    | Osig_modtype of string * Ast_404.Outcometree.out_module_type
    | Osig_module of string * Ast_404.Outcometree.out_module_type *
        Ast_404.Outcometree.out_rec_status
    | Osig_type of Ast_404.Outcometree.out_type_decl *
        Ast_404.Outcometree.out_rec_status
    | Osig_value of Ast_404.Outcometree.out_val_decl
    | Osig_ellipsis
  and out_type_decl = {
    otype_name : string;
    otype_params : (string * (bool * bool)) list;
    otype_type : Ast_404.Outcometree.out_type;
    otype_private : Ast_404.Asttypes.private_flag;
    otype_immediate : bool;
    otype_unboxed : bool;
    otype_cstrs :
      (Ast_404.Outcometree.out_type * Ast_404.Outcometree.out_type) list;
  }
  and out_extension_constructor = {
    oext_name : string;
    oext_type_name : string;
    oext_type_params : string list;
    oext_args : Ast_404.Outcometree.out_type list;
    oext_ret_type : Ast_404.Outcometree.out_type option;
    oext_private : Ast_404.Asttypes.private_flag;
  }
  and out_type_extension = {
    otyext_name : string;
    otyext_params : string list;
    otyext_constructors :
      (string * Ast_404.Outcometree.out_type list *
       Ast_404.Outcometree.out_type option)
      list;
    otyext_private : Ast_404.Asttypes.private_flag;
  }
  and out_val_decl = {
    oval_name : string;
    oval_type : Ast_404.Outcometree.out_type;
    oval_prims : string list;
    oval_attributes : Ast_404.Outcometree.out_attribute list;
  }
  and out_rec_status = Orec_not | Orec_first | Orec_next
  and out_ext_status = Oext_first | Oext_next | Oext_exception
  type out_phrase =
      Ophr_eval of Ast_404.Outcometree.out_value *
        Ast_404.Outcometree.out_type
    | Ophr_signature of
        (Ast_404.Outcometree.out_sig_item *
         Ast_404.Outcometree.out_value option)
        list
    | Ophr_exception of (exn * Ast_404.Outcometree.out_value)
end