 
   ISeqable
   (-seq [rng]
-    (let [comp (if (pos? step) < >)]
-      (when (comp start end)
+    (if (pos? step)
+      (when (< start end)
+        rng)
+      (when (> start end)
         rng)))
 
   IReduce

(defn last
  "Return the last item in coll, in linear time"
  [s]
  (if (next s)
    (recur (next s))
    (first s)))

(extend-type default
  IEquiv

  ISeq
  (-first [rng] start)
  (-rest [rng]
    (if (coercive-not= (-seq rng) nil)
      (Range. meta (+ start step) end step nil)
      ()))

  ICollection
  (-conj [rng o] (cons o rng))
