   unshift: (item) -> @insertAt(0, item)
   shift: -> @deleteAt(0)
   update: (list) ->
-    unmark(@, element) for element in @
     delete @[index] for index, _ of @ when isArrayIndex(index)
     @[index] = val for val, index in list
-    mark(@, element) for element in list
     @length = getLength(@)
     @trigger("update", list)
     @trigger("change", @)
     list
   splice: (start, deleteCount, list...) ->
-    mark(@, element) for item in list
     deleted = Array.prototype.splice.apply(@, [start, deleteCount, list...])
-    unmark(@, element) for element in deleted
     @length = getLength(@)
     @trigger("update", list)
     @trigger("change", @)

  find: (fun) ->
    return item for item in @ when fun(item)
  insertAt: (index, value) ->
    mark(@, value)
    Array.prototype.splice.call(@, index, 0, value)
    @length = getLength(@)
    @trigger("insert", index, value)

  indices = (parseInt(index, 10) for index, val of arr when isArrayIndex(index))
  if indices.length then Math.max(indices...) + 1 else 0

class exports.Collection
  extend(@prototype, Events)
  constructor: (list) ->
