import { ifElse, curry, useWith, both, gte, lte, gt } from 'ramda';
const inRangeImp = ifElse(
gte,
() => {
throw new Error(
'low must not be greater than high in inRange(low, high, value)'
);
},
useWith(both, [lte, gt])
);
/**
* Checks if `value` is between `low` and up to but not including `high`.
*
* @func inRange
* @memberOf RA
* @since {@link https://char0n.github.io/ramda-adjunct/2.7.0|v2.7.0}
* @category Relation
* @sig Number -> Number -> Number -> Boolean
* @param {number} low Start of the range
* @param {number} high The end of the range
* @param {number} value The value to test
* @return {boolean}
* @throws {Error} When `low` is greater than or equal to `high`
* @example
*
* RA.inRange(0, 5, 3); //=> true
* RA.inRange(0, 5, 0); //=> true
* RA.inRange(0, 5, 4); //=> true
* RA.inRange(0, 5, 5); //=> false
* RA.inRange(0, 5, -1); //=> false
*/
export default curry((low, high, value) => inRangeImp(low, high)(value));