# Module Std_kernel.Comparator

    module Comparator: Comparator

    type ('a, 'witness) t = private {

`` | `compare : `'a -> 'a -> int`;`
`` | `sexp_of_t : `'a -> Sexplib.Sexp.t`;`

}

    type ('a, 'b) comparator = ('a, 'b) t

    module type S = sig .. end

    module type S1 = sig .. end

    module Poly: S1  with type 'a t = 'a

    module S_to_S1: functor (S : S) -> S1
      with type 'a t = S.t
      with type comparator_witness = S.comparator_witness

The `Make` functors mint fresh types that are used as the phantom `comparator_witness`es.

    module Make: functor (M : sig
    type t

    val sexp_of_t : t -> Sexplib.Sexp.t
    val compare : t -> t -> intend) -> S  with type t := M.t

    module Make1: functor (M : sig
    type 'a t

    val compare : 'a t -> 'a t -> int
    val sexp_of_t : 'a t -> Sexplib.Sexp.tend) -> S1  with type 'a t := 'a M.t