Коллега сказал, что это не возможно сделать, но:
let assoc = (dict, key, value) => {
return (getKey) => {
if (getKey == key)
return value;
else if (dict === null)
return undefined;
else
return dict(getKey);
};
};
let d1 = assoc(null, "a", 1);
let d2 = assoc(d1, "b", 2);
console.log(d2("b"), d2("a"), d1("a"), d1("b"));
// 2, 1, 1, undefined