sig
  type 'a t = 'a list
  val compare :
    ('-> '-> int) ->
    'Misc.Stdlib.List.t -> 'Misc.Stdlib.List.t -> int
  val equal :
    ('-> '-> bool) ->
    'Misc.Stdlib.List.t -> 'Misc.Stdlib.List.t -> bool
  val find_map : ('-> 'b option) -> 'Misc.Stdlib.List.t -> 'b option
  val some_if_all_elements_are_some :
    'a option Misc.Stdlib.List.t -> 'Misc.Stdlib.List.t option
  val map2_prefix :
    ('-> '-> 'c) ->
    'Misc.Stdlib.List.t ->
    'Misc.Stdlib.List.t -> 'Misc.Stdlib.List.t * 'Misc.Stdlib.List.t
  val split_at :
    int ->
    'Misc.Stdlib.List.t -> 'Misc.Stdlib.List.t * 'Misc.Stdlib.List.t
  val is_prefix : equal:('-> '-> bool) -> 'a list -> of_:'a list -> bool
  type 'a longest_common_prefix_result = private {
    longest_common_prefix : 'a list;
    first_without_longest_common_prefix : 'a list;
    second_without_longest_common_prefix : 'a list;
  }
  val find_and_chop_longest_common_prefix :
    equal:('-> '-> bool) ->
    first:'a list ->
    second:'a list -> 'Misc.Stdlib.List.longest_common_prefix_result
end