   (<= [x y] (t/<= (as-interval x) (as-interval y)))
   (> [x y] (t/> (as-interval x) (as-interval y)))
   (>= [x y] (t/>= (as-interval x) (as-interval y)))
-  Interval
+  clojure.lang.APersistentMap
   (< [x y] (#{precedes? meets?} (basic-relation x y)))
   (<= [x y] (#{precedes? meets? equals? starts? overlaps? finished-by?} (basic-relation x y)))
   (> [x y] (#{preceded-by? met-by?} (basic-relation x y)))

;; Functions that make use of Allens' Interval Algebra

(defprotocol IIntervalOps
  (slice [_ beginning end] "Fit the interval between beginning and end, slicing off one or both ends as necessary")
  (splice [ival1 ival2] "Splice two intervals together")
  (split [ival t] "Split ival into 2 intervals at t, returned as a 2-element vector"))

(defn split-with-assert [ival t]
  (assert

  (let [t1 (t/beginning (t/temporal-value v1))
        t2 (t/end (t/temporal-value v2))]
    (if (t/< t1 t2)
      {:tick/beginning t1
       :tick/end t2}
      (throw (ex-info "Interval must span between two times, the first must be before the second" {})))))

;; Adjustments
