code: function reject(collection, fn, ctx) {
    const [col, func] = isFunction(collection) ? [null, collection.bind(fn)] : [collection, fn.bind(ctx)];
    return filter(col, complement(func));
  }
docs: **Creates a collection containing only the elements from the input collection that do not pass a predicate
  function.**
  
  This is the opposite of `{@link module:xduce.transducers.filter|filter}`. None of the elements of the input
  collection are modified, and only those for which the predicate returns `false` are included in the output
  collection.
  
  If no collection is provided, a function is returned that can be passed to `{@link module:xduce.sequence|sequence}`,
  et al.
  
  ```
  const even = x => x % 2 === 0;
  const result = reject([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], even);
  // result = [1, 3, 5, 7, 9]
  ```
  
  @memberof module:xduce.transducers
  
  @param {*} [collection] An optional input collection that is to be transduced.
  @param {function} fn A predicate function. This takes each element of the input collection and returns `true` or
  `false` based on that element. Each that returns `false` will be included in the output collection.
  @param {object} [ctx] An optional context object which is set to `this` for the function `fn`. This does not work if
  `fn` is an arrow function, as they cannot be bound to contexts.
  @return {(*|module:xduce~transducerFunction)} If a collection is supplied, then the function returns a new
  collection of the same type containing only the elements that fail the predicate function. If no collection is
  supplied, a transducer function, suitable for passing to `{@link module:xduce.sequence|sequence}`,
  `{@link module:xduce.into|into}`, etc. is returned.