import curry2 from "./curry2";
/**
* Memoizes a function where the key generator function
* decides which cached result should be returned.
*
* @param {function} keyGenerator
* @param {function} func
*/
const memoizeWith = (keyGenerator, func) => {
const cache = {};
return (...args) => {
const key = keyGenerator(...args);
if (!cache.hasOwnProperty(key)) {
const result = func(...args);
cache[key] = result;
}
return cache[key];
};
};
export default curry2(memoizeWith);