 
   # Returns a new Set containing items from this or set
   __or__: (set) ->
-    union = List()
-    union.append(item) for item in @value.keys()
-    union.append(item) for item in set.value.keys()
+    union = []
+    union.push(item) for item in @value.keys()
+    union.push(item) for item in set.value.keys()
     return new Set(union)
 
   # Same as __and__ since intersection is symmetric

  constructor: (iterable) ->
    @value = new Dict() # set just is a wrapped version of our own Dict class
    if iterable?
      for item in iterable.value # Handles empty constructor call too
        @value.__setitem__(item, true)

  __and__: (other) ->
    intersect = new List()
    intersect.append(item) for item in @value.value when other.__contains__(item)
    return new Set(intersect)

  __cmp__: (set) ->

  
  # Inplace and operation. x.__iand__(y) changes x
  __iand__: (set) ->
    deletedKeys = []
    for item in @value.keys()
      if not set.__contains__(item)
        deletedKeys.push(item)
    for deletedKey in deletedKeys
      @value.pop(deletedKey)
    return @
  
