 
 (defn vector [& args] (vec args))
 
-(deftype ChunkedSeq [vec node i off meta]
+(deftype ChunkedSeq [vec node i off meta ^:mutable __hash]
   IWithMeta
   (-with-meta [coll m]
     (chunked-seq vec node i off m))

              (chunked-seq vec (+ i l) 0))]
      (if (nil? s)
        nil
        s))))

(defn chunked-seq
  ([vec i off] (chunked-seq vec (array-for vec i) i off nil))
  ([vec node i off] (chunked-seq vec node i off nil))
  ([vec node i off meta]
     (ChunkedSeq. vec node i off meta)))

(deftype Subvec [meta v start end ^:mutable __hash]
  Object

  ([arr off end]
     (ArrayChunk. arr off end)))

(deftype ChunkedCons [chunk more meta ^:mutable __hash]
  IWithMeta
  (-with-meta [coll m]
    (ChunkedCons. chunk more m __hash))

  IMeta
  (-meta [coll] meta)
