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

  (group-by [grouping ivals]))

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

(defrecord GeneralRelation [relations]
  #?(:clj clojure.lang.IFn :cljs cljs.core/IFn)
  (#?(:clj invoke :cljs -invoke) [_ x y]
    (some (fn [f] (when (f x y) f)) relations)))

;; Relations are 'basic relations' in [ALSPAUGH-2009]. Invoking a
