 (defprotocol IDeref
   (-deref  [o]))
 
-; TODO: multiple dispatch for protocols
-; (defprotocol ISwap
-;     (-swap!  [o f]  [o f a]  [o f a b]  [o f a b xs]))
-
 (defprotocol ISwap
-  (-swap!  [o f & xs]))
+  (-swap!  [o f]  [o f a]  [o f a b]  [o f a b xs]))
 
 (defprotocol IEquiv
   (-equiv [x other]))

  (-peek [coll])
  (-pop [coll]))

;; TODO: multiple dispatch for protocols
(defprotocol IReduce
  (-reduce [coll f start]))

(defprotocol IPrintable
  (-pr-str [o]))

    (PersistentArrayMap. (hamt/remove k h)))

  IFn
  (-invoke [coll k]
    (-lookup coll k))

