sig
  type loc = Ploc.t
  type 'a v = 'a
  type ctyp =
      TyAcc of MLast.loc * MLast.ctyp * MLast.ctyp
    | TyAli of MLast.loc * MLast.ctyp * MLast.ctyp
    | TyAny of MLast.loc
    | TyApp of MLast.loc * MLast.ctyp * MLast.ctyp
    | TyArr of MLast.loc * MLast.ctyp * MLast.ctyp
    | TyCls of MLast.loc * string list
    | TyLab of MLast.loc * string * MLast.ctyp
    | TyLid of MLast.loc * string
    | TyMan of MLast.loc * MLast.ctyp * MLast.ctyp
    | TyObj of MLast.loc * (string * MLast.ctyp) list * bool
    | TyOlb of MLast.loc * string * MLast.ctyp
    | TyPol of MLast.loc * string list * MLast.ctyp
    | TyQuo of MLast.loc * string
    | TyRec of MLast.loc * (MLast.loc * string * bool * MLast.ctyp) list
    | TySum of MLast.loc * (MLast.loc * string * MLast.ctyp list) list
    | TyTup of MLast.loc * MLast.ctyp list
    | TyUid of MLast.loc * string
    | TyVrn of MLast.loc * MLast.poly_variant list *
        string list option option
  and poly_variant =
      PvTag of string * bool * MLast.ctyp list
    | PvInh of MLast.ctyp
  type type_var = string * (bool * bool)
  type 'a class_infos = {
    ciLoc : MLast.loc;
    ciVir : bool;
    ciPrm : MLast.loc * MLast.type_var list;
    ciNam : string;
    ciExp : 'a;
  }
  type patt =
      PaAcc of MLast.loc * MLast.patt * MLast.patt
    | PaAli of MLast.loc * MLast.patt * MLast.patt
    | PaAnt of MLast.loc * MLast.patt
    | PaAny of MLast.loc
    | PaApp of MLast.loc * MLast.patt * MLast.patt
    | PaArr of MLast.loc * MLast.patt list
    | PaChr of MLast.loc * string
    | PaInt of MLast.loc * string * string
    | PaFlo of MLast.loc * string
    | PaLab of MLast.loc * string * MLast.patt option
    | PaLid of MLast.loc * string
    | PaOlb of MLast.loc * string * (MLast.patt * MLast.expr option) option
    | PaOrp of MLast.loc * MLast.patt * MLast.patt
    | PaRng of MLast.loc * MLast.patt * MLast.patt
    | PaRec of MLast.loc * (MLast.patt * MLast.patt) list
    | PaStr of MLast.loc * string
    | PaTup of MLast.loc * MLast.patt list
    | PaTyc of MLast.loc * MLast.patt * MLast.ctyp
    | PaTyp of MLast.loc * string list
    | PaUid of MLast.loc * string
    | PaVrn of MLast.loc * string
  and expr =
      ExAcc of MLast.loc * MLast.expr * MLast.expr
    | ExAnt of MLast.loc * MLast.expr
    | ExApp of MLast.loc * MLast.expr * MLast.expr
    | ExAre of MLast.loc * MLast.expr * MLast.expr
    | ExArr of MLast.loc * MLast.expr list
    | ExAsr of MLast.loc * MLast.expr
    | ExAss of MLast.loc * MLast.expr * MLast.expr
    | ExBae of MLast.loc * MLast.expr * MLast.expr list
    | ExChr of MLast.loc * string
    | ExCoe of MLast.loc * MLast.expr * MLast.ctyp option * MLast.ctyp
    | ExFlo of MLast.loc * string
    | ExFor of MLast.loc * string * MLast.expr * MLast.expr * bool *
        MLast.expr list
    | ExFun of MLast.loc * (MLast.patt * MLast.expr option * MLast.expr) list
    | ExIfe of MLast.loc * MLast.expr * MLast.expr * MLast.expr
    | ExInt of MLast.loc * string * string
    | ExLab of MLast.loc * string * MLast.expr option
    | ExLaz of MLast.loc * MLast.expr
    | ExLet of MLast.loc * bool * (MLast.patt * MLast.expr) list * MLast.expr
    | ExLid of MLast.loc * string
    | ExLmd of MLast.loc * string * MLast.module_expr * MLast.expr
    | ExMat of MLast.loc * MLast.expr *
        (MLast.patt * MLast.expr option * MLast.expr) list
    | ExNew of MLast.loc * string list
    | ExObj of MLast.loc * MLast.patt option * MLast.class_str_item list
    | ExOlb of MLast.loc * string * MLast.expr option
    | ExOvr of MLast.loc * (string * MLast.expr) list
    | ExRec of MLast.loc * (MLast.patt * MLast.expr) list * MLast.expr option
    | ExSeq of MLast.loc * MLast.expr list
    | ExSnd of MLast.loc * MLast.expr * string
    | ExSte of MLast.loc * MLast.expr * MLast.expr
    | ExStr of MLast.loc * string
    | ExTry of MLast.loc * MLast.expr *
        (MLast.patt * MLast.expr option * MLast.expr) list
    | ExTup of MLast.loc * MLast.expr list
    | ExTyc of MLast.loc * MLast.expr * MLast.ctyp
    | ExUid of MLast.loc * string
    | ExVrn of MLast.loc * string
    | ExWhi of MLast.loc * MLast.expr * MLast.expr list
  and module_type =
      MtAcc of MLast.loc * MLast.module_type * MLast.module_type
    | MtApp of MLast.loc * MLast.module_type * MLast.module_type
    | MtFun of MLast.loc * string * MLast.module_type * MLast.module_type
    | MtLid of MLast.loc * string
    | MtQuo of MLast.loc * string
    | MtSig of MLast.loc * MLast.sig_item list
    | MtUid of MLast.loc * string
    | MtWit of MLast.loc * MLast.module_type * MLast.with_constr list
  and sig_item =
      SgCls of MLast.loc * MLast.class_type MLast.class_infos list
    | SgClt of MLast.loc * MLast.class_type MLast.class_infos list
    | SgDcl of MLast.loc * MLast.sig_item list
    | SgDir of MLast.loc * string * MLast.expr option
    | SgExc of MLast.loc * string * MLast.ctyp list
    | SgExt of MLast.loc * string * MLast.ctyp * string list
    | SgInc of MLast.loc * MLast.module_type
    | SgMod of MLast.loc * bool * (string * MLast.module_type) list
    | SgMty of MLast.loc * string * MLast.module_type
    | SgOpn of MLast.loc * string list
    | SgTyp of MLast.loc * MLast.type_decl list
    | SgUse of MLast.loc * string * (MLast.sig_item * MLast.loc) list
    | SgVal of MLast.loc * string * MLast.ctyp
  and with_constr =
      WcTyp of MLast.loc * string list * MLast.type_var list * bool *
        MLast.ctyp
    | WcMod of MLast.loc * string list * MLast.module_expr
  and module_expr =
      MeAcc of MLast.loc * MLast.module_expr * MLast.module_expr
    | MeApp of MLast.loc * MLast.module_expr * MLast.module_expr
    | MeFun of MLast.loc * string * MLast.module_type * MLast.module_expr
    | MeStr of MLast.loc * MLast.str_item list
    | MeTyc of MLast.loc * MLast.module_expr * MLast.module_type
    | MeUid of MLast.loc * string
  and str_item =
      StCls of MLast.loc * MLast.class_expr MLast.class_infos list
    | StClt of MLast.loc * MLast.class_type MLast.class_infos list
    | StDcl of MLast.loc * MLast.str_item list
    | StDir of MLast.loc * string * MLast.expr option
    | StExc of MLast.loc * string * MLast.ctyp list * string list
    | StExp of MLast.loc * MLast.expr
    | StExt of MLast.loc * string * MLast.ctyp * string list
    | StInc of MLast.loc * MLast.module_expr
    | StMod of MLast.loc * bool * (string * MLast.module_expr) list
    | StMty of MLast.loc * string * MLast.module_type
    | StOpn of MLast.loc * string list
    | StTyp of MLast.loc * MLast.type_decl list
    | StUse of MLast.loc * string * (MLast.str_item * MLast.loc) list
    | StVal of MLast.loc * bool * (MLast.patt * MLast.expr) list
  and type_decl = {
    tdNam : MLast.loc * string;
    tdPrm : MLast.type_var list;
    tdPrv : bool;
    tdDef : MLast.ctyp;
    tdCon : (MLast.ctyp * MLast.ctyp) list;
  }
  and class_type =
      CtCon of MLast.loc * string list * MLast.ctyp list
    | CtFun of MLast.loc * MLast.ctyp * MLast.class_type
    | CtSig of MLast.loc * MLast.ctyp option * MLast.class_sig_item list
  and class_sig_item =
      CgCtr of MLast.loc * MLast.ctyp * MLast.ctyp
    | CgDcl of MLast.loc * MLast.class_sig_item list
    | CgInh of MLast.loc * MLast.class_type
    | CgMth of MLast.loc * string * bool * MLast.ctyp
    | CgVal of MLast.loc * string * bool * MLast.ctyp
    | CgVir of MLast.loc * string * bool * MLast.ctyp
  and class_expr =
      CeApp of MLast.loc * MLast.class_expr * MLast.expr
    | CeCon of MLast.loc * string list * MLast.ctyp list
    | CeFun of MLast.loc * MLast.patt * MLast.class_expr
    | CeLet of MLast.loc * bool * (MLast.patt * MLast.expr) list *
        MLast.class_expr
    | CeStr of MLast.loc * MLast.patt option * MLast.class_str_item list
    | CeTyc of MLast.loc * MLast.class_expr * MLast.class_type
  and class_str_item =
      CrCtr of MLast.loc * MLast.ctyp * MLast.ctyp
    | CrDcl of MLast.loc * MLast.class_str_item list
    | CrInh of MLast.loc * MLast.class_expr * string option
    | CrIni of MLast.loc * MLast.expr
    | CrMth of MLast.loc * string * bool * MLast.expr * MLast.ctyp option
    | CrVal of MLast.loc * string * bool * MLast.expr
    | CrVir of MLast.loc * string * bool * MLast.ctyp
  external loc_of_ctyp : MLast.ctyp -> MLast.loc = "%field0"
  external loc_of_patt : MLast.patt -> MLast.loc = "%field0"
  external loc_of_expr : MLast.expr -> MLast.loc = "%field0"
  external loc_of_module_type : MLast.module_type -> MLast.loc = "%field0"
  external loc_of_module_expr : MLast.module_expr -> MLast.loc = "%field0"
  external loc_of_sig_item : MLast.sig_item -> MLast.loc = "%field0"
  external loc_of_str_item : MLast.str_item -> MLast.loc = "%field0"
  external loc_of_class_type : MLast.class_type -> MLast.loc = "%field0"
  external loc_of_class_sig_item : MLast.class_sig_item -> MLast.loc
    = "%field0"
  external loc_of_class_expr : MLast.class_expr -> MLast.loc = "%field0"
  external loc_of_class_str_item : MLast.class_str_item -> MLast.loc
    = "%field0"
end