Attempt 1:
Create one lens for the overall object path.
// [String] -> Lens s a
var lensPath = function (path) {
var getter = R.path(path);
var setter = R.assocPath(path);
return R.lens(getter, setter);
}
var deepLens = lensPath(['a', 'b']);
var result = R.over(deepLens, myFn, myObj);
console.log(result, myObj);
And my work here is done. (>.>)
var toJson = R.nAry(1, JSON.stringify);
var test = R.curry(function (input, fn, expected, name) {
var actual = fn(input);
var passes = R.equals(expected, actual);
if (passes)
return R.concat(name, ': pass');
else
return R.join(' ', [name, ': fail -- expected: ', toJson(expected), ' -- actual: ', toJson(actual)]);
});
var testWithObj = test(myObj);
var testView = testWithObj(R.view(deepLens), 2, 'test view');
var expected = { a: { b: 4 } };
var testSet = testWithObj(R.set(deepLens, 4), expected, 'test set');
var expected = { a: { b: 3 } };
var testOver = testWithObj(R.over(deepLens, R.inc), expected, 'test over');