sig
  type element_test =
      SchemaElementTest of Xquery_common_ast.ename
    | ElementTest of
        (Xquery_common_ast.ename * Xquery_common_ast.tname option) option
  type attribute_test =
      SchemaAttributeTest of Xquery_common_ast.aname
    | AttributeTest of
        (Xquery_common_ast.aname * Xquery_common_ast.tname option) option
  type kind_test =
      DocumentKind of Xquery_ast.element_test option
    | ElementKind of Xquery_ast.element_test
    | AttributeKind of Xquery_ast.attribute_test
    | PIKind of string option
    | CommentKind
    | TextKind
    | AnyKind
  type itemtype =
      ITKindTest of Xquery_ast.kind_test
    | ITTypeRef of Xquery_common_ast.tname
    | ITItem
    | ITNumeric
    | ITAnyString
    | ITAtomic of Xquery_common_ast.tname
    | ITEmpty
  type sequencetype_desc =
      Xquery_ast.itemtype * (Occurrence.occurs * Occurrence.occurs) option
  type sequencetype = {
    psequencetype_desc : Xquery_ast.sequencetype_desc;
    psequencetype_loc : Finfo.finfo;
  }
  type node_test =
      PNameTest of Namespace_names.uqname
    | PNodeKindTest of Xquery_ast.kind_test
  type pattern = {
    ppattern_desc : Xquery_ast.pattern_desc;
    ppattern_loc : Finfo.finfo;
  }
  and pattern_desc = Case of Xquery_ast.sequencetype | Default
  type expr = { pexpr_desc : Xquery_ast.expr_desc; pexpr_loc : Finfo.finfo; }
  and expr_desc =
      EUnordered of Xquery_ast.expr list
    | EOrdered of Xquery_ast.expr list
    | EBinaryOp of Xquery_ast.expr * Xquery_common_ast.binop *
        Xquery_ast.expr
    | EFLWOR of Xquery_ast.fl_expr list * Xquery_ast.expr option *
        Xquery_ast.order_by option * Xquery_ast.expr
    | EIf of Xquery_ast.expr * Xquery_ast.expr * Xquery_ast.expr
    | ESome of
        (Xquery_ast.sequencetype option * Xquery_common_ast.vname *
         Xquery_ast.expr)
        list * Xquery_ast.expr
    | EEvery of
        (Xquery_ast.sequencetype option * Xquery_common_ast.vname *
         Xquery_ast.expr)
        list * Xquery_ast.expr
    | ETypeswitch of Xquery_ast.expr *
        (Xquery_ast.pattern * Xquery_common_ast.vname option *
         Xquery_ast.expr)
        list
    | EInstanceOf of Xquery_ast.expr * Xquery_ast.sequencetype
    | ERange of Xquery_ast.expr * Xquery_ast.expr
    | EUnaryOp of Xquery_common_ast.unaryop * Xquery_ast.expr
    | ERoot
    | EPath of Xquery_ast.path_expr
    | ESelf
    | EParent
    | EVar of Xquery_common_ast.vname
    | EScalar of Xquery_common_ast.literal
    | EApp of Xquery_common_ast.fname * Xquery_ast.expr list
    | EList of Xquery_ast.expr list
    | EEnclosed of Xquery_ast.expr
    | ECast of Xquery_ast.expr * Xquery_ast.sequencetype
    | ECastable of Xquery_ast.expr * Xquery_ast.sequencetype
    | ETreat of Xquery_ast.expr * Xquery_ast.sequencetype
    | EValidate of Xquery_common_ast.validation_mode option * Xquery_ast.expr
    | EElemFixed of Xquery_common_ast.ename * Xquery_ast.expr list *
        Xquery_ast.expr list
    | EElemComputed of Xquery_ast.expr list * Xquery_ast.expr list
    | EAttrFixed of Xquery_common_ast.aname * Xquery_ast.expr list
    | EAttrComputed of Xquery_ast.expr list * Xquery_ast.expr list
    | EDocument of Xquery_ast.expr list
    | EText of string
    | ECharRef of int
    | ETextComputed of Xquery_ast.expr list
    | EPI of Namespace_names.ncname * string
    | EPIComputed of Xquery_ast.expr list * Xquery_ast.expr list
    | EComment of string
    | ECommentComputed of Xquery_ast.expr list
    | EPragma of Namespace_names.uqname * string * Xquery_ast.expr list
    | ELetServerImplement of Namespace_names.ncname *
        Namespace_names.ncname * Xquery_ast.expr * Xquery_ast.expr
    | EForServerClose of Namespace_names.ncname * Namespace_names.ncname *
        Xquery_ast.expr
    | EExecute of bool * Namespace_names.ncname * Xquery_ast.expr
    | EEvalClosure of Xquery_ast.expr
    | ECopy of Xquery_ast.expr
    | ESnap of Xquery_common_ast.snap_modifier * Xquery_ast.expr
    | EDelete of Xquery_ast.snap * Xquery_ast.expr
    | EInsert of Xquery_ast.snap * Xquery_ast.expr *
        Xquery_ast.insert_location
    | ERename of Xquery_ast.snap * Xquery_ast.expr * Xquery_ast.expr
    | EReplace of Xquery_ast.snap * Xquery_common_ast.value_of_flag *
        Xquery_ast.expr * Xquery_ast.expr
    | ERevalidate of Xquery_ast.snap *
        Xquery_common_ast.validation_mode option * Xquery_ast.expr
    | ETransform of Xquery_ast.copyvar_expr list * Xquery_ast.expr *
        Xquery_ast.expr
    | EWhile of Xquery_ast.expr * Xquery_ast.expr
    | ELetvar of Xquery_ast.sequencetype option * Xquery_common_ast.vname *
        Xquery_ast.expr * Xquery_ast.expr
    | ESet of Xquery_common_ast.vname * Xquery_ast.expr
    | EBlock of Xquery_ast.block_decl_expr list * Xquery_ast.expr list
  and path_expr =
      PSlash of Xquery_ast.expr * Xquery_ast.expr
    | PSlashSlash of Xquery_ast.expr * Xquery_ast.expr
    | PAxis of Xquery_common_ast.axis * Xquery_ast.node_test
    | PStepQualifiers of Xquery_ast.expr * Xquery_ast.step_qualifier list
  and step_qualifier = {
    pstep_qualifier_desc : Xquery_ast.step_qualifier_desc;
    pstep_qualifier_loc : Finfo.finfo;
  }
  and step_qualifier_desc = PredicateQualifier of Xquery_ast.expr
  and fl_expr = {
    pfl_desc : Xquery_ast.fl_expr_desc;
    pfl_loc : Finfo.finfo;
  }
  and fl_expr_desc =
      ELet of Xquery_ast.sequencetype option * Xquery_common_ast.vname *
        Xquery_ast.expr
    | EFor of Xquery_ast.sequencetype option * Xquery_common_ast.vname *
        Xquery_common_ast.vname option * Xquery_ast.expr
  and order_by = Xquery_common_ast.stablekind * Xquery_ast.order_spec list
  and order_spec =
      Xquery_ast.expr * Xquery_common_ast.sortkind *
      Xquery_common_ast.emptysortkind option
  and insert_location =
      EAsLastInto of Xquery_ast.expr
    | EAsFirstInto of Xquery_ast.expr
    | EInto of Xquery_ast.expr
    | EAfter of Xquery_ast.expr
    | EBefore of Xquery_ast.expr
  and snap = Snap | NoSnap
  and copyvar_expr_desc = Xquery_common_ast.vname * Xquery_ast.expr
  and copyvar_expr = {
    pcopyvar_desc : Xquery_ast.copyvar_expr_desc;
    pcopyvar_loc : Finfo.finfo;
  }
  and block_decl_expr = {
    bl_decl_desc : Xquery_ast.block_decl_desc;
    bl_decl_loc : Finfo.finfo;
  }
  and block_decl_desc =
      Xquery_ast.sequencetype option * Xquery_common_ast.vname *
      Xquery_ast.expr
  type statement = Xquery_ast.expr
  type function_body =
      EFunctionBltIn
    | EFunctionInterface
    | EFunctionImported
    | EFunctionUser of Xquery_ast.expr
  type function_signature =
      Xquery_ast.sequencetype option list * Xquery_ast.sequencetype option
  type function_def = {
    pfunction_def_desc : Xquery_ast.function_def_desc;
    pfunction_loc : Finfo.finfo;
  }
  and function_def_desc =
      Xquery_common_ast.fname * Xquery_common_ast.vname list *
      Xquery_ast.function_signature * Xquery_ast.function_body *
      Xquery_common_ast.updating_modifier
  type var_body =
      EVarExternal
    | EVarInterface
    | EVarImported
    | EVarUser of Xquery_ast.expr
  type var_decl = {
    pvar_decl_desc : Xquery_ast.var_decl_desc;
    pvar_decl_loc : Finfo.finfo;
  }
  and var_decl_desc =
      Xquery_common_ast.vname * Xquery_ast.sequencetype option *
      Xquery_ast.var_body
  type server_decl = {
    pserver_decl_desc : Xquery_ast.server_decl_desc;
    pserver_decl_loc : Finfo.finfo;
  }
  and server_decl_desc =
      Namespace_names.ncname * Namespace_names.ncname * Xquery_ast.expr
  type index_def = {
    pindex_def_desc : Xquery_ast.index_def_desc;
    pindex_def_loc : Finfo.finfo;
  }
  and index_def_desc =
      ValueIndex of string * Xquery_ast.expr * Xquery_ast.expr
    | NameIndex of Xquery_common_ast.ename
  type context_decl = {
    pcontext_decl_desc : Xquery_ast.context_decl_desc;
    pcontext_decl_loc : Finfo.finfo;
  }
  and context_decl_desc =
      EBaseURIDecl of string
    | ENamespaceDecl of Xquery_common_ast.namespace_declaration
    | EDefaultElementNamespaceDecl of Namespace_names.uri
    | EDefaultFunctionNamespaceDecl of Namespace_names.uri
    | ESchemaDecl of (Namespace_names.prefix option * string * string option)
    | EImportServiceDecl of (Namespace_names.ncname * string * string option)
    | EImportModuleDecl of (Namespace_names.ncname * string * string option)
    | EXmlSpaceDecl of Xquery_common_ast.strip_or_preserve
    | EDefaultCollationDecl of string
    | EConstructionDecl of Xquery_common_ast.strip_or_preserve
    | EOrderingDecl of Xquery_common_ast.ordered_or_unordered
    | EDefaultEmptyOrderDecl of Xquery_common_ast.emptysortkind
    | ECopyNamespacesDecl of
        (Xquery_common_ast.preserve_or_no_preserve *
         Xquery_common_ast.inherit_or_no_inherit)
    | EImportInterfaceDecl of
        (Namespace_names.ncname * string * string option)
  type funcvar_def =
      OptionDecl of Xquery_common_ast.ename * string
    | FunDef of Xquery_ast.function_def
    | VarDef of Xquery_ast.var_decl
    | ServerDef of Xquery_ast.server_decl
  type prolog = {
    mutable pprolog_xschemas : Xquery_type_ast.xschema list;
    mutable pprolog_contexts : Xquery_ast.context_decl list;
    mutable pprolog_funcvars : Xquery_ast.funcvar_def list;
    mutable pprolog_indices : Xquery_ast.index_def list;
  }
  type interface_prolog = {
    mutable iprolog_xschemas : Xquery_type_ast.xschema list;
    mutable iprolog_contexts : Xquery_ast.context_decl list;
    mutable iprolog_funcvars : Xquery_ast.funcvar_def list;
  }
  type interface = {
    pinterface_decl : Namespace_names.ncname * string;
    pinterface_prolog : Xquery_ast.interface_prolog;
  }
  type library_module = {
    plibrary_module_decl :
      Namespace_names.ncname * string * (string * string option) option;
    plibrary_module_prolog : Xquery_ast.prolog;
  }
  type main_module = {
    pmain_module_prolog : Xquery_ast.prolog;
    pmain_module_statements : Xquery_ast.statement list;
  }
  type xmodule =
      ELibraryModule of Xquery_ast.library_module
    | EMainModule of Xquery_ast.main_module
  type expr_handle = Xquery_ast.expr option
end