Карта делает большую часть того, что вам нужно, при условии, что вы окружаете ее кодом для ввода правильных значений. Например:
const createObject = specification => value => R.map(f => f(value), specification);
const objectCreator = createObject({
foo: val => val * 2,
bar: val => val + 1,
});
let result = objectCreator(42); // { foo: 84, bar: 43 }
Или, если вы хотите, чтобы он был карри (чтобы вы могли передать спецификацию и значение одновременно или отдельно):
const createObject = R.curry((specification, value) => R.map(f => f(value), specification))
let result = createObject({
foo: val => val * 2,
bar: val => val + 1,
}, 42); // { foo: 84, bar: 43 }
РЕДАКТИРОВАТЬ:
Если бы порядок входов был обратным (т. Е. Сначала значение, потом спецификация), было бы проще:
const createObject = value => R.map(f => f(value))