 ;;;;;;;;;;;;;;;;;;; fundamentals ;;;;;;;;;;;;;;;
 
 (declare array-seq prim-seq IndexedSeq)
+
+(defn iterable? [x]
+  (satisfies? IIterable x))
 
 (defn clone [value]
   (-clone value))

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

(declare LazyTransformer)


(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]
