sig
  type ('input, 'output) case =
    ('input, 'output) Documented_match_statement.case = {
    pattern : 'input list;
    documentation : string;
    value : 'output;
  }
  type ('input, 'output) t =
    ('input, 'output) Documented_match_statement.t = {
    specific_cases : ('input, unit -> 'output) case list;
    catchall_case :
      [ `Unused of unit -> 'output
      | `Used of ([ `Catchall ], 'input -> 'output) case ];
  }
  val map :
    ('input, 'output1) t -> f:('output1 -> 'output2) -> ('input, 'output2) t
  val map_case :
    ('input, unit -> 'output1) case ->
    f:('output1 -> 'output2) -> ('input, unit -> 'output2) case
  val map_cases :
    ('input, unit -> 'output1) case list ->
    f:('output1 -> 'output2) -> ('input, unit -> 'output2) case list
  val map_pattern :
    ('input1, 'output) t ->
    f1:('input1 -> 'input2) ->
    f2:('input2 -> 'input1) -> ('input2, 'output) t
  val prepend :
    specific_cases:('input, unit -> 'output) case list ->
    ('input, 'output) t -> ('input, 'output) t
  val match_ : ('input, 'output) t -> 'input -> 'output
  val documentation :
    ('input, 'output) t ->
    input_to_string:('input -> string) -> title:string -> string list
end