code: function assertFunctions(functions) {
    if (!Array.isArray(functions)) {
      throw new TypeError(msg.argFuncArray);
    }
  
    const funcs = [];
  
    for (let i = 0; i < functions.length; i++) {
      const item = functions[i];
  
      if (typeof item === 'object') {
        const bind = elv.coalesce(item.bind, null);
        const { fn } = item;
        const label = elv.coalesce(item.label, fn.name, `anonymous${i}`);
        const params = elv.coalesce(item.params, []);
  
        if (typeof fn !== 'function') {
          throw new TypeError(msg.argFuncFn);
        }
  
        if (typeof label !== 'string') {
          throw new TypeError(msg.argFuncLabel);
        }
  
        if (!Array.isArray(params)) {
          throw new TypeError(msg.argFuncParams);
        }
  
        funcs.push({
          bind,
          fn,
          label,
          params,
        });
  
        continue;
      }
  
      if (typeof item !== 'function') {
        throw new TypeError(msg.argFuncItem);
      }
  
      funcs.push({
        bind: null,
        fn: item,
        label: elv.coalesce(item.name, `anonymous${i}`),
        params: [],
      });
    }
  
    return funcs;
  }
docs: ASSERTION FUNCTIONS  
  Validates a given list of functions.  A TypeError is thrown if the input is
  invalid. Otherwise, an array of normalized {FunctionConfiguration} objects is
  returned.
  
  @param {(function|FunctionConfiguration)[]} functions
  
  @returns FunctionConfiguration[]