pub fn fingerprint_fun(param: VarId, body: &Core) -> StringExpand description
The same, for an expression written over one bound parameter, whose number is written canonically.
This is the form every index’s key takes, and it is a separate function because the difference
is not cosmetic: lambda b: b.lot and lambda c: c.lot are the same key, and Core numbers
variables per definition, so two loops that index the same collection by the same key arrive
here with different numbers. Fingerprinting them apart built two identical arrangements — an
arrangement is memory per subscriber as well as work per event
(docs/23 §23.14), so the safe direction
was not free.
Only the parameter is normalised, and that is enough because an index key reads nothing else
— the recogniser refuses the shape otherwise. A let bound inside one would still fingerprint
by its number, which is the same conservatism one level down and has no program.