code: function when (predicate, fn) {
      return function (value) {
          return predicate.call(this, value) ? fn.call(this, value) : value;
      };
  }
docs: Builds a unary function that will check its argument against the given predicate.
  If the predicate is satisfied, the provided <code>fn</code> function will be
  applied to the same value. The received argument is returned as it is otherwise.<br/>
  See {@link module:lamb.unless|unless} for the opposite behaviour.<br/>
  It's a shortcut for a common use case of {@link module:lamb.condition|condition},
  where its <code>falseFn</code> parameter is the [identity function]{@link module:lamb.identity}.
  @example
  var isEven = function (n) { return n % 2 === 0; };
  var halveIfEven = _.when(isEven, _.divideBy(2));
  
  halveIfEven(5) // => 5
  halveIfEven(6) // => 3
  
  @memberof module:lamb
  @category Logic
  @see {@link module:lamb.condition|condition}
  @see {@link module:lamb.unless|unless}
  @see {@link module:lamb.adapter|adapter}
  @see {@link module:lamb.case|case}
  @since 0.42.0
  @param {Function} predicate
  @param {Function} fn
  @returns {Function}