   (-count [coll] (hamt/count h))
 
   ILookup
-  ; TODO: multiple arity protocols
   (-lookup [coll k]
     (hamt/get k h))
+  (-lookup [coll k not-found]
+    (hamt/tryGet not-found k h))
 
   IAssociative
   (-assoc [coll k v]

  (-next [coll]))

(defprotocol ILookup
  ;; FIXME multiple arity protocols
  (-lookup [o k])
  ; (-lookup [o k] [o k not-found])
)

(defprotocol ISet
  (-disjoin [coll v]))

        (.apply list nil r))))

  IIndexed
  (-nth [coll n]
    (hamt/get (+ offset n) h))
  (-nth [coll n not-found]
    (hamt/tryGet not-found (+ offset n) h))

  ILookup
  (-lookup [coll k]
    (if (number? k)
      (-nth coll k)
      nil))
  (-lookup [coll k not-found]
    (if (number? k)
      (-nth coll k not-found)
      not-found))

  IAssociative
  (-assoc [coll k v]
