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