Report forwarded
to bug-guix@gnu.org: bug#34999; Package guix.
(Tue, 26 Mar 2019 09:39:01 GMT) (full text, mbox, link).
Acknowledgement sent
to Ludovic Courtès <ludo@gnu.org>:
New bug report received and forwarded. Copy sent to bug-guix@gnu.org.
(Tue, 26 Mar 2019 09:39:02 GMT) (full text, mbox, link).
The changes I made in version-control.scm and gnucash.scm in commit
e6301fb76d0a8d931ece2e18d197e3c2cc53fc6c revealed an abstraction leakage
I wasn’t aware of: there’s a pattern where users “see” that thunked
fields are thunked:
(package
;; …
(inputs …)
(arguments `(foo bar ,(inputs) …))) ;<- here ‘inputs’ is seen as a thunk
Fortunately I could only find two occurrences of this and this use case
is more elegantly replaced by:
(package-inputs this-record)
… which also has better semantics. It’s remains a bug, though.
Ludo’.
Severity set to 'important' from 'normal'
Request was from Ludovic Courtès <ludo@gnu.org>
to control@debbugs.gnu.org.
(Thu, 04 Apr 2019 11:27:02 GMT) (full text, mbox, link).
Information forwarded
to bug-guix@gnu.org: bug#34999; Package guix.
(Tue, 24 Aug 2021 15:48:02 GMT) (full text, mbox, link).
Hi Ludo,
I think I have found out why users see the thunked fields as below.
Am Dienstag, den 26.03.2019, 10:38 +0100 schrieb Ludovic Courtès:
> The changes I made in version-control.scm and gnucash.scm in commit
> e6301fb76d0a8d931ece2e18d197e3c2cc53fc6c revealed an abstraction
> leakage
> I wasn’t aware of: there’s a pattern where users “see” that thunked
> fields are thunked:
>
> (package
> ;; …
> (inputs …)
> (arguments `(foo bar ,(inputs) …))) ;<- here ‘inputs’ is seen as
> a thunk
The issue is that for constructing the records, we let*-bind the field
names to their values before calling the constructor. In these let*-
bindings the fields are already wrapped, e.g. inputs will be bound to
the value that the record field inputs will have, not to the raw value.
I've attached a patch to fix this issue as well as a MWE to try it out.
I'm not sure about the broader semantics of this patch, though. I fear
that exposing raw values through let-binding probably eliminates the
delayed/thunked nature of said fields in some ways. WDYT?
Debbugs is free software and licensed under the terms of the
GNU Public License version 2. The current version can be
obtained from https://bugs.debian.org/debbugs-source/.