sig
  type match_props = {
    is_exhaustive : bool;
    missing_pats : Typed_ast.pat list list;
    redundant_pats : (int * Typed_ast.pat) list;
    overlapping_pats : ((int * Typed_ast.pat) * (int * Typed_ast.pat)) list;
  }
  val check_match_exp :
    Typed_ast.env -> Typed_ast.exp -> Patterns.match_props option
  val check_pat_list :
    Typed_ast.env -> Typed_ast.pat list -> Patterns.match_props option
  val check_match_exp_warn : Typed_ast.env -> Typed_ast.exp -> unit
  val check_match_def :
    Typed_ast.env -> Typed_ast.def -> (Name.t * Patterns.match_props) list
  val check_match_def_warn : Typed_ast.env -> Typed_ast.def -> unit
  type match_check_arg
  val cleanup_match_exp :
    Typed_ast.env -> bool -> Typed_ast.exp -> Typed_ast.exp option
  val compile_match_exp :
    Target.target ->
    Patterns.match_check_arg ->
    Typed_ast.env -> Typed_ast.exp -> Typed_ast.exp option
  val compile_exp :
    Target.target ->
    Patterns.match_check_arg ->
    Typed_ast.env ->
    Macro_expander.macro_context -> Typed_ast.exp -> Typed_ast.exp option
  val compile_def :
    Target.target ->
    Patterns.match_check_arg -> Typed_ast.env -> Def_trans.def_macro
  val is_isabelle_pattern_match : Patterns.match_check_arg
  val is_hol_pattern_match : Patterns.match_check_arg
  val is_coq_pattern_match : Patterns.match_check_arg
  val is_ocaml_pattern_match : Patterns.match_check_arg
  val is_pattern_match_const : bool -> Patterns.match_check_arg
  val check_number_patterns : Typed_ast.env -> Typed_ast.pat -> unit
  val remove_function :
    Typed_ast.env ->
    (Typed_ast.exp -> Typed_ast.exp) -> Typed_ast.exp -> Typed_ast.exp option
  val remove_fun :
    Typed_ast.env ->
    (Typed_ast.exp -> Typed_ast.exp) -> Typed_ast.exp -> Typed_ast.exp option
  val remove_toplevel_match :
    Target.target ->
    Patterns.match_check_arg -> Typed_ast.env -> Def_trans.def_macro
  val collapse_nested_matches :
    Patterns.match_check_arg ->
    Typed_ast.env -> Typed_ast.exp -> Typed_ast.exp option
end