sig
  val is_var_wild_pat : Typed_ast.pat -> bool
  val is_var_pat : Typed_ast.pat -> bool
  val is_ext_var_pat : Typed_ast.pat -> bool
  val is_var_tup_pat : Typed_ast.pat -> bool
  val is_var_wild_tup_pat : Typed_ast.pat -> bool
  val dest_var_pat : Typed_ast.pat -> Name.t option
  val dest_ext_var_pat : Typed_ast.pat -> Name.t option
  val pat_to_ext_name : Typed_ast.pat -> Typed_ast.name_lskips_annot option
  val is_wild_pat : Typed_ast.pat -> bool
  val dest_tup_pat : int option -> Typed_ast.pat -> Typed_ast.pat list option
  val mk_tup_pat : Typed_ast.pat list -> Typed_ast.pat
  val is_tup_pat : int option -> Typed_ast.pat -> bool
  val dest_tf_pat : Typed_ast.pat -> bool option
  val is_tf_pat : Typed_ast.pat -> bool
  val is_t_pat : Typed_ast.pat -> bool
  val is_f_pat : Typed_ast.pat -> bool
  val mk_tf_pat : bool -> Typed_ast.pat
  val mk_paren_pat : Typed_ast.pat -> Typed_ast.pat
  val mk_opt_paren_pat : Typed_ast.pat -> Typed_ast.pat
  val dest_num_pat : Typed_ast.pat -> int option
  val is_num_pat : Typed_ast.pat -> bool
  val mk_num_pat : Types.t -> int -> Typed_ast.pat
  val dest_num_add_pat : Typed_ast.pat -> (Name.t * int) option
  val mk_num_add_pat : Types.t -> Name.t -> int -> Typed_ast.pat
  val is_num_add_pat : Typed_ast.pat -> bool
  val num_ty_pat_cases :
    (Name.t -> 'a) ->
    (int -> 'a) ->
    (Name.t -> int -> 'a) ->
    '-> (Typed_ast.pat -> 'a) -> Typed_ast.pat -> 'a
  val dest_string_pat : Typed_ast.pat -> string option
  val is_string_pat : Typed_ast.pat -> bool
  val dest_cons_pat : Typed_ast.pat -> (Typed_ast.pat * Typed_ast.pat) option
  val is_cons_pat : Typed_ast.pat -> bool
  val dest_list_pat :
    int option -> Typed_ast.pat -> Typed_ast.pat list option
  val is_list_pat : int option -> Typed_ast.pat -> bool
  val dest_const_pat :
    Typed_ast.pat ->
    (Typed_ast.const_descr_ref Types.id * Typed_ast.pat list) option
  val is_const_pat : Typed_ast.pat -> bool
  val dest_record_pat :
    Typed_ast.pat ->
    (Typed_ast.const_descr_ref Types.id * Typed_ast.pat) list option
  val is_record_pat : Typed_ast.pat -> bool
  val is_constructor :
    Ast.l ->
    Typed_ast.env -> Target.target -> Typed_ast.const_descr_ref -> bool
  val is_buildin_constructor :
    Ast.l ->
    Typed_ast.env -> Target.target -> Typed_ast.const_descr_ref -> bool
  val is_not_buildin_constructor :
    Ast.l ->
    Typed_ast.env -> Target.target -> Typed_ast.const_descr_ref -> bool
  val direct_subpats : Typed_ast.pat -> Typed_ast.pat list
  val subpats : Typed_ast.pat -> Typed_ast.pat list
  val exists_subpat : (Typed_ast.pat -> bool) -> Typed_ast.pat -> bool
  val for_all_subpat : (Typed_ast.pat -> bool) -> Typed_ast.pat -> bool
  val single_pat_exhaustive : Typed_ast.pat -> bool
  val pat_vars_src : Typed_ast.pat -> (Name.lskips_t, unit) Types.annot list
  val pat_extract_lskips : Typed_ast.pat -> Ast.lex_skips
  val split_var_annot_pat : Typed_ast.pat -> Typed_ast.pat
  exception Pat_to_exp_unsupported of Ast.l * string
  val pat_to_exp : Typed_ast.env -> Typed_ast.pat -> Typed_ast.exp
end