replaceEqualDeep
This function returns a if b is deeply equal.
If not, it will replace any deeply equal children of b with those of a.
This can be used for structural sharing between JSON values for example.
function replaceEqualDeep<T>(a: unknown, b: T): T;