NodeSeq

typesince v0.0-1211 clojure.lang/NodeSeqEdit
satisfies ICollection IEmptyableCollection IEquiv IHash IMeta INext IPrintWithWriter IReduce ISeq ISeqable ISequential IWithMeta

(NodeSeq. meta nodes i s __hash)

Source code @ clojurescript:src/main/cljs/cljs/core.cljs
(deftype NodeSeq [meta nodes i s ^:mutable __hash]
  Object
  (toString [coll]
    (pr-str* coll))
  (equiv [this other]
    (-equiv this other))
  (indexOf [coll x]
    (-indexOf coll x 0))
  (indexOf [coll x start]
    (-indexOf coll x start))
  (lastIndexOf [coll x]
    (-lastIndexOf coll x (count coll)))
  (lastIndexOf [coll x start]
    (-lastIndexOf coll x start))

  IMeta
  (-meta [coll] meta)

  IWithMeta
  (-with-meta [coll new-meta]
    (if (identical? new-meta meta)
      coll
      (NodeSeq. new-meta nodes i s __hash)))

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

  IEmptyableCollection
  (-empty [coll] (.-EMPTY List))

  ISequential
  ISeq
  (-first [coll]
    (if (nil? s)
      (MapEntry. (aget nodes i) (aget nodes (inc i)) nil)
      (first s)))

  (-rest [coll]
    (let [ret (if (nil? s)
                (create-inode-seq nodes (+ i 2) nil)
                (create-inode-seq nodes i (next s)))]
      (if-not (nil? ret) ret ())))

  INext
  (-next [coll]
    (if (nil? s)
      (create-inode-seq nodes (+ i 2) nil)
      (create-inode-seq nodes i (next s))))

  ISeqable
  (-seq [this] this)

  IEquiv
  (-equiv [coll other] (equiv-sequential coll other))

  IHash
  (-hash [coll] (caching-hash coll hash-ordered-coll __hash))

  IReduce
  (-reduce [coll f] (seq-reduce f coll))
  (-reduce [coll f start] (seq-reduce f start coll)))