   __isub__: (set) ->
     for item in set.value
       if @__contains__(item)
-        @pop(item)
+        @value.pop(item)
     return @
 
   __iter__: ->

  
  issuperset: (set) ->
    return @__ge__(set)

  copy: ->
    return new Set(@)
  
  difference: (others...) ->
    difference = @copy()
    for other in others
      difference.__isub__(other)
    return difference

  difference_update: (others...) ->
    for other in others
      @__isub__(other)
    return

  discard: (elem) ->
    @value.pop(elem)
    return

  intersection: (others...) ->
    intersect = @copy()
    for other in others
      intersect.__isub__(other)
    return intersect

  intersection_update: (others...) ->
    for other in others
      @.__isub__(other)
    return

  # Checks to see if this and set are disjoint, meaning this intersected with set is the empty set 
