functor (T : T->
  sig
    module type S =
      sig
        val create :
          'Interval_intf.T.bound ->
          'Interval_intf.T.bound -> 'Interval_intf.T.t
        val empty : 'Interval_intf.T.t
        val intersect :
          'Interval_intf.T.t ->
          'Interval_intf.T.t -> 'Interval_intf.T.t
        val is_empty : 'Interval_intf.T.t -> bool
        val is_empty_or_singleton : 'Interval_intf.T.t -> bool
        val bounds :
          'Interval_intf.T.t ->
          ('Interval_intf.T.bound * 'Interval_intf.T.bound) option
        val lbound : 'Interval_intf.T.t -> 'Interval_intf.T.bound option
        val ubound : 'Interval_intf.T.t -> 'Interval_intf.T.bound option
        val bounds_exn :
          'Interval_intf.T.t ->
          'Interval_intf.T.bound * 'Interval_intf.T.bound
        val lbound_exn : 'Interval_intf.T.t -> 'Interval_intf.T.bound
        val ubound_exn : 'Interval_intf.T.t -> 'Interval_intf.T.bound
        val contains :
          'Interval_intf.T.t -> 'Interval_intf.T.bound -> bool
        val compare_value :
          'Interval_intf.T.t ->
          'Interval_intf.T.bound ->
          [ `Above | `Below | `Interval_is_empty | `Within ]
        val bound :
          'Interval_intf.T.t ->
          'Interval_intf.T.bound -> 'Interval_intf.T.bound option
        val is_superset :
          'Interval_intf.T.t -> of_:'Interval_intf.T.t -> bool
        val is_subset :
          'Interval_intf.T.t -> of_:'Interval_intf.T.t -> bool
        val map :
          f:('Interval_intf.T.bound -> 'Interval_intf.T.bound) ->
          'Interval_intf.T.t -> 'Interval_intf.T.t
        val are_disjoint : 'Interval_intf.T.t list -> bool
        val are_disjoint_as_open_intervals :
          'Interval_intf.T.t list -> bool
        val list_intersect :
          'Interval_intf.T.t list ->
          'Interval_intf.T.t list -> 'Interval_intf.T.t list
        val half_open_intervals_are_a_partition :
          'Interval_intf.T.t list -> bool
      end
  end