// source code from library ramda
// https://github.com/Ramda/ramda/blob/master/source/identical.js

import _curry2 from "./internal/_curry2";

/**
 * Returns true if its arguments are identical, false otherwise. Values are
 * identical if they reference the same memory. `NaN` is identical to `NaN`;
 * `0` and `-0` are not identical.
 *
 * @func
 * @memberOf R
 * @since v0.15.0
 * @category Relation
 * @sig a -> a -> Boolean
 * @param {*} a
 * @param {*} b
 * @return {Boolean}
 * @example
 *
 *      var o = {};
 *      R.identical(o, o); //=> true
 *      R.identical(1, 1); //=> true
 *      R.identical(1, '1'); //=> false
 *      R.identical([], []); //=> false
 *      R.identical(0, -0); //=> false
 *      R.identical(NaN, NaN); //=> true
 */
var identical = /*#__PURE__*/ _curry2(function identical(a, b) {
	// SameValue algorithm
	if (a === b) {
		// Steps 1-5, 7-10
		// Steps 6.b-6.e: +0 != -0
		return a !== 0 || 1 / a === 1 / b;
	} else {
		// Step 6.a: NaN == NaN
		return a !== a && b !== b;
	}
});
export default identical;
