define(['./_flatten', './restArguments', './filter', './contains'], function (_flatten, restArguments, filter, contains) {

  // Take the difference between one array and a number of other arrays.
  // Only the elements present in just the first array will remain.
  var difference = restArguments(function(array, rest) {
    rest = _flatten(rest, true, true);
    return filter(array, function(value){
      return !contains(rest, value);
    });
  });

  return difference;

});
