Я пытаюсь составить функции, которые возвращают линзы, создать новую линзу и сделать это в бессмысленном стиле.
Вероятно, это более общий вопрос о композиции функций. Линзы - это просто пример. Меня не интересуют объективы, но я хочу узнать общую схему, как составлять эти функции бессмысленно.
const obj = {a: {x: 0}, b: {x: 42}};
// this won't work, but I want it to work
const pointFreeComposedLens = R.compose(R.lensProp, R.lensProp('x'));
R.view(pointFreeComposedLens('a'), obj); // returns 'undefined'
// this works
const pointyComposedLens = key => R.compose(R.lensProp(key), R.lensProp('x'));
R.view(pointyComposedLens('a'), obj); // returns '0'
Каков шаблон для составления функций, чтобы мне не нужно было переписывать аргументы для первой функции в конвейере композиции?
Для вопиющего примера:
const deepLens = (a, b, c) => R.lensPath([a, b, c]);
// This works, but is tedious & verbose
const extraDeep = (a, b, c, x) => R.compose(deepLens(a,b,c), R.lensProp(x));
const gammaDeep = (a, b, c, y) => R.compose(deepLens(a,b,c), R.lensProp(y));
// Doesn't work, but it would be nicer to write:
const extraDeep = x => R.compose(deepLens, R.lensProp(x));
// and call it like so:
R.view(extraDeep('a','b','c','x'), obj);