Am Sonntag, dem 25.02.2024 um 10:49 -0800 schrieb antlers: > > 1.) It leaks `(guix records)`'s thunked/delayed field abstraction to > the end-user, which will confuse and regularly bite absolutely anyone > who tries to use it. > > 2.) Ideally we'd check that modified fields exist at compile-time. > This could require users to provide the record-type, which is not > always public, but could also be optional. You can get the record type of a record at run-time, so at least you can synthesize a check that gives you a helpful message if that's what you're gunning for.
> 3) The `cut`-like transformation is recursive and, while it has > well-defined and tested behavior, the semantics are non-standard. I > don't believe that the syntax achieves its goals without this > mechanism, but there are remaining sub-concerns to address before I'd > consider it ready to formalize and document. Perhaps we can make it like modify-services where we take a value updater instead of evaluating the forms directly? This would fix both #3 and #1 (since we'd unwrap the thunked/delayed field silently). That would also make it so that we can use a single set of arrows (=>) for both. > 4) The syntax expands modifications of multiple fields into recursive > expansions (ie: calls to the record constructor) when it would be > more efficient (especially for thunked/delayed fields) to accumulate > transformations by target field and `compose' them over a single call > to the record constructor. This hasn't been an issue in practice, but > would be the "right thing to do". That's a minor detail, but it might be a syntax-rules → syntax-case change. > If I do raise the possibility of up-streaming it would be with these > issues addressed, and would still have substantial cause to warrant > discretionary discussion then. Really a scratching-my-own-itch > solution atm. Of course it'd go through the proper review channels first, but from personal experience talk over at guix-devel is less likely to cause the change you want over submitting an actual patch :) Cheers