   get: (key) -> @root.get(0, key)
 
   @plusOne: (root, [key, value]) ->
-    if util.isKey(key) and not areEqual(root.get(0, key), value)
+    if util.isKey(key) and root.get(0, key) != value
       root.plus(0, key, new IntLeafWithValue(key, value))
     else
       root

  minus: (shift, hash, key) ->
    switch @bucket.length
      when 0, 1 then null
      when 2    then Sequence.find @bucket, (v) -> not areEqual(v.key, key)
      else           new CollisionNode(hash, this.bucketWithout(key))

  toString: -> "#{@bucket.join("|")}"

  bucketWithout: (key) ->
    item for item in @bucket when not areEqual(item.key, key)


# --------------------------------------------------------------------

    @elements = Sequence.flatMap @bucket, (n) -> n?.elements

  get: (shift, hash, key) ->
    leaf = Sequence.find @bucket, (v) -> equalKeys(v.key, key)
    leaf.get(shift, hash, key) if leaf?

  plus: (shift, hash, leaf) ->
