         difference.value.pop(item)
     return difference
 
+  # Returns new Set containing items in this or set, but not both
   __xor__: (set) ->
     diff1 = @__sub__(set)
     diff2 = set.__sub__(xor)

  __iter__: ->
    return new Iterator(@)
  
  __ixor__: (set) ->
    diff1 = @__sub__(set)
    diff2 = set.__sub__(xor)

  __ne__: (set) ->
    return not @__eq__(set)

  # Returns a new Set containing items from this or set
  __or__: (set) ->
    union = List()
    union.append(item) for item in @value.value
    union.append(item) for item in set.value
    return new Set(union)

  # Same as __and__ since intersection is symmetric
  __rand__: (set) ->
    return @__and__(set)
  
  # ** Unimplemented **
  __reduce__: ->
  
  # ** Unimplemented **
  __repr__: ->
  
  # Same as __or__ since union is symmetric  
  __ror__: (set) ->
    return @__or__(set)

  # Subtract this from set
  __rsub__: (set) ->
    return set.__sub__(@)
  
  # Same as __xor__ since xor is symmetric  
  __rxor__: (set) ->
    return @__xor__(set)

  # ** Unimplemented **
  __sizeof__: ->
  
  # Subtract new set containing this - set
  __sub__: (set) ->
    difference = @copy()
    for item in set.value
