 (defrecord GeneralRelation [relations]
   #?(:clj clojure.lang.IFn :cljs cljs.core/IFn)
   (#?(:clj invoke :cljs -invoke) [_ x y]
-    #_(s/assert ::interval x)
-    #_(s/assert ::interval y)
     (some (fn [f] (when (f x y) f)) relations)))
 
 ;; Relations are 'basic relations' in [ALSPAUGH-2009]. Invoking a

  (group-by [grouping ivals]))

(extend-protocol IGroupable
  #?(:clj clojure.lang.Fn :cljs function) 
  (group-by [f ivals]
    (if (empty? ivals)
      {}

            e (f (t/end r))
            groups (t/range b (t/inc e))]
        (group-by groups ivals))))
  #?(:clj Iterable :cljs LazySeq)
  (group-by [groups ivals]
    (group-by-intervals groups ivals))
  #?(:cljs PersistentVector)
  #?(:cljs
     (group-by [groups ivals]
       (group-by-intervals groups ivals))))
