sig
  type physical_annotation = {
    has_nested_snap : bool;
    has_side_effect : bool;
    has_delta_update : bool;
    path_annotation : Alg_path_struct.path_annotation;
    mutable materialize_tuple_stream : bool;
  }
  type eval_code_unit =
      Execution_context.algebra_context ->
      unit -> Physical_value.physical_value
  type eval_code_unary =
      Execution_context.algebra_context ->
      Physical_value.physical_value -> Physical_value.physical_value
  type eval_code_binary =
      Execution_context.algebra_context ->
      Physical_value.physical_value ->
      Physical_value.physical_value -> Physical_value.physical_value
  type eval_code_many =
      Execution_context.algebra_context ->
      Physical_value.physical_value array -> Physical_value.physical_value
  type alg_eval_code =
      AOECUnit of Algebra_type.eval_code_unit
    | AOECUnary of Algebra_type.eval_code_unary
    | AOECBinary of Algebra_type.eval_code_binary
    | AOECMany of Algebra_type.eval_code_many
  type eval_fun =
      Execution_context.algebra_context ->
      Algebra_type.algop_expr -> Physical_value.physical_value
  and tail_entry_code =
      Physical_value.physical_value array -> Algebra_type.algop_expr
  and tail_exit_code =
      Physical_value.physical_value -> Physical_value.physical_value
  and alg_eval_code_dep =
      NoDep of (Algebra_type.eval_fun -> Algebra_type.alg_eval_code) *
        (Algebra_type.tail_entry_code * Algebra_type.tail_exit_code) option
    | SomeDep of (Algebra_type.eval_fun -> Algebra_type.alg_eval_code) *
        (Algebra_type.tail_entry_code * Algebra_type.tail_exit_code) option
  and algop_sub_exprs =
      (Algebra_type.alg_eval_code_dep, Algebra_type.physical_annotation)
      Xquery_algebra_ast.aalgop_sub_exprs
  and algop_expr =
      (Algebra_type.alg_eval_code_dep, Algebra_type.physical_annotation)
      Xquery_algebra_ast.aalgop_expr
  type eval_code_unit_prolog =
      Execution_context.algebra_context ->
      unit -> Execution_context.algebra_context
  type eval_code_unary_prolog =
      Execution_context.algebra_context ->
      Physical_value.physical_value -> Execution_context.algebra_context
  type eval_code_binary_prolog =
      Execution_context.algebra_context ->
      Physical_value.physical_value ->
      Physical_value.physical_value -> Execution_context.algebra_context
  type eval_code_many_prolog =
      Execution_context.algebra_context ->
      Physical_value.physical_value array ->
      Execution_context.algebra_context
  type alg_eval_code_prolog =
      PAOECUnit of Algebra_type.eval_code_unit_prolog
    | PAOECUnary of Algebra_type.eval_code_unary_prolog
    | PAOECBinary of Algebra_type.eval_code_binary_prolog
    | PAOECMany of Algebra_type.eval_code_many_prolog
  type alg_eval_code_dep_prolog =
      PNoDep of Algebra_type.alg_eval_code_prolog
    | PSomeDep of
        (Algebra_type.eval_fun -> Algebra_type.alg_eval_code_prolog)
  type eval_fun_prolog =
      Execution_context.algebra_context ->
      Algebra_type.algop_expr -> Execution_context.algebra_context
  type algop_decl =
      (Algebra_type.alg_eval_code_dep, Algebra_type.physical_annotation,
       Algebra_type.alg_eval_code_dep_prolog)
      Xquery_algebra_ast.aalgop_decl
  type algop_prolog =
      (Algebra_type.alg_eval_code_dep, Algebra_type.physical_annotation,
       Algebra_type.alg_eval_code_dep_prolog)
      Xquery_algebra_ast.aalgop_prolog
  type algop_xmodule =
      (Algebra_type.alg_eval_code_dep, Algebra_type.physical_annotation,
       Algebra_type.alg_eval_code_dep_prolog)
      Xquery_algebra_ast.aalgop_xmodule
  type algop_function_body =
      (Algebra_type.alg_eval_code_dep, Algebra_type.physical_annotation)
      Xquery_algebra_ast.aalgop_expr
  type alg_compile_context =
      (Algebra_type.alg_eval_code_dep, Algebra_type.physical_annotation)
      Compile_context.compile_context
  type item_cursor_nary_to_item_cursor_code =
      Execution_context.algebra_context ->
      Physical_value.item Cursor.cursor array ->
      Physical_value.item Cursor.cursor
  type item_list_nary_to_item_list_code =
      Execution_context.algebra_context ->
      Physical_value.item list array -> Physical_value.item list
end