sig
  type ('a, 'b) compile_context
  val build_compile_context :
    Typing_context.static_context -> ('a, 'b) Compile_context.compile_context
  val default_compile_context :
    Norm_context.norm_context -> ('a, 'b) Compile_context.compile_context
  val replace_static_context_in_compile_context :
    Typing_context.static_context ->
    ('a, 'b) Compile_context.compile_context ->
    ('a, 'b) Compile_context.compile_context
  val replace_namespace_env_in_compile_context :
    Namespace_context.nsenv ->
    ('a, 'b) Compile_context.compile_context ->
    ('a, 'b) Compile_context.compile_context
  val static_context_from_compile_context :
    ('a, 'b) Compile_context.compile_context -> Typing_context.static_context
  val norm_context_from_compile_context :
    ('a, 'b) Compile_context.compile_context -> Norm_context.norm_context
  val add_function_to_compile_context :
    ('a, 'b) Compile_context.compile_context ->
    Xquery_common_ast.cfname * int ->
    ('a, 'b) Xquery_algebra_ast.aalgop_function_body -> unit
  val get_function_from_compile_context :
    string ->
    ('a, 'b) Compile_context.compile_context ->
    Xquery_common_ast.cfname * int ->
    ('a, 'b) Xquery_algebra_ast.aalgop_function_body
  val mem_function_from_compile_context :
    ('a, 'b) Compile_context.compile_context ->
    Xquery_common_ast.cfname * int -> bool
  val update_physical_plan_in_compile_context :
    ('a, 'b) Compile_context.compile_context ->
    Xquery_common_ast.cfname * int ->
    ('a, 'b) Xquery_algebra_ast.aalgop_expr -> unit
  val register_builtin : Xquery_common_ast.cfname * int -> unit
  val is_builtin : Xquery_common_ast.cfname * int -> bool
  val has_input_set : ('a, 'b) Compile_context.compile_context -> bool
  val add_variable_field_to_compile_context :
    ('a, 'b) Compile_context.compile_context ->
    Xquery_common_ast.cvname -> ('a, 'b) Compile_context.compile_context
  val hide_variable_field_from_compile_context :
    ('a, 'b) Compile_context.compile_context ->
    Xquery_common_ast.cvname -> ('a, 'b) Compile_context.compile_context
  val get_variable_field_from_compile_context :
    ('a, 'b) Compile_context.compile_context ->
    Xquery_common_ast.cvname -> Xquery_common_ast.crname option
  val get_tuple_field_name :
    ('a, 'b) Compile_context.compile_context ->
    Xquery_common_ast.cvname -> Xquery_common_ast.crname
  val get_new_variable_name :
    ('a, 'b) Compile_context.compile_context ->
    string -> Namespace_names.rqname
  val get_new_group_name :
    ('a, 'b) Compile_context.compile_context -> Namespace_names.rqname
  val get_new_dot_name :
    ('a, 'b) Compile_context.compile_context -> Namespace_names.rqname
  val get_new_var_name :
    ('a, 'b) Compile_context.compile_context -> Namespace_names.rqname
  val no_more_input : ('a, 'b) Compile_context.compile_context -> unit
  val update_compile_context_from_module :
    ('a, 'b) Compile_context.compile_context ->
    ('a, 'b, 'c) Xquery_algebra_ast.aalgop_xmodule ->
    ('a, 'b) Compile_context.compile_context
  val copy_compile_context :
    ('a, 'b) Compile_context.compile_context ->
    ('a, 'b) Compile_context.compile_context
  val copy_without_functions :
    ('a, 'b) Compile_context.compile_context ->
    ('c, 'd) Compile_context.compile_context
  val map_function_bodies :
    ('a, 'b) Compile_context.compile_context ->
    (('c, 'd) Xquery_algebra_ast.aalgop_function_body
     Namespace_util.RQNameIntHashtbl.t ->
     Xquery_common_ast.cfname * int ->
     ('a, 'b) Xquery_algebra_ast.aalgop_function_body -> unit) ->
    ('c, 'd) Compile_context.compile_context
  val update_compile_context :
    ('a, 'b) Compile_context.compile_context ->
    ('a, 'b) Compile_context.compile_context ->
    ('a, 'b) Compile_context.compile_context
end