 (defprotocol ISwap
   (-swap! [o f] [o f a] [o f a b] [o f a b xs]))
 
+(defprotocol IIterable
+  (-iterator [coll]))
+
 ;; Printing support
 
 (deftype StringBufferWriter [sb]

    (nil? coll) (nil-iter)
    (string? coll) (string-iter coll)
    (array? coll) (array-iter coll)
    :else (seq-iter coll)))

(declare LazyTransformer)


;;;;;;;;;;;;;;;;;;; fundamentals ;;;;;;;;;;;;;;;

(declare array-seq prim-seq IndexedSeq)

(defn iterable? [x]
  (satisfies? IIterable x))

(defn clone [value]
  (-clone value))
