transform = function(keep_paths, del_paths, obj) {
const duplicate = (path,o) => R.assocPath(path, R.view(R.lensPath(path),obj) , {});
const gather_parts = (o) => keep_paths.map(p => duplicate(p,obj));
const merge_parts = (parts) => parts.reduce((o1,o2) => R.mergeDeepLeft(o1,o2), {});
const suppress_deleted_parts = (o) => R.reduce((r,d) => R.dissocPath(d,r),o, del_paths);
return R.pipe(gather_parts,merge_parts,suppress_deleted_parts)(obj);
}