function _isFunction(x) {
    var type = Object.prototype.toString.call(x);
    return type === '[object Function]' || type === '[object AsyncFunction]' || type === '[object GeneratorFunction]' || type === '[object AsyncGeneratorFunction]';
  }
Wraps a function of any arity (including nullary) in a function that accepts
exactly 2 parameters. Any extraneous parameters will not be passed to the
supplied function.

@func
@memberOf R
@since v0.2.0
@category Function
@sig (a -> b -> c -> ... -> z) -> ((a, b) -> z)
@param {Function} fn The function to wrap.
@return {Function} A new function wrapping `fn`. The new function is guaranteed to be of
        arity 2.
@see R.nAry, R.unary
@example

     const takesThreeArgs = function(a, b, c) {
       return [a, b, c];
     };
     takesThreeArgs.length; //=> 3
     takesThreeArgs(1, 2, 3); //=> [1, 2, 3]

     const takesTwoArgs = R.binary(takesThreeArgs);
     takesTwoArgs.length; //=> 2
     // Only 2 arguments are passed to the wrapped function
     takesTwoArgs(1, 2, 3); //=> [1, 2, undefined]
@symb R.binary(f)(a, b, c) = f(a, b)