Stable structural key for use as cache-key / identifier-suffix. Two structurally-equal representations return equal stableKey strings.
Stable structural key for use as cache-key / identifier-suffix. Two structurally-equal representations return equal stableKey strings.
Distinct from toString: for SumReprProxy the default Object.toString returns ClassName@HEX (identity-based), leaking proxy-instance identity into any key that embeds the repr rendering (e.g. LoweringEq's sumEq helper cache, UPLC var-name derivation). Use stableKey there instead.
Implemented in terms of stableKeyInternal which threads a seen set through the recursion so self-referential SumReprProxy produces SumProxy(cycle) as a stable placeholder. Override stableKeyInternal in every subclass that recursively contains a LoweredValueRepresentation field so the seen set is propagated.
Recursive worker for stableKey. Default delegates to toString, which is correct for leaf case-objects and case-classes whose fields don't recursively contain a LoweredValueRepresentation. Any subclass that does contain a nested repr must override and call child.stableKeyInternal(seen) on each nested field.
Recursive worker for stableKey. Default delegates to toString, which is correct for leaf case-objects and case-classes whose fields don't recursively contain a LoweredValueRepresentation. Any subclass that does contain a nested repr must override and call child.stableKeyInternal(seen) on each nested field.