On Sun, Oct 06, 2019 at 12:00:27PM +0200, Ludovic Courtès wrote: > "pelzflorian (Florian Pelz)" <pelzflor...@pelzflorian.de> skribis: > > Is it possible to make import cycles not an error in Guix packages? > > Unfortunately no, it’s fundamentally impossible. When you have: > > (define-module (a) #:use-module (b)) > (define-public var-a 42) > > and: > > (define-module (b) #:use-module (a)) > (define-public var-b (+ var-a 1)) > > you can understand that it will or will not work depending on whether > (b) or (a) is loaded first. This is what’s happening here. > […] > When you use ‘guix show’ or similar, that goes through the package cache > created during ‘guix pull’, which allows Guix to load directly the > module that contains the package. That order could be different from > the one you have in your checkout. >
Thank you for the explanation. I now understand that eliminating the error is not possible within define-module. Currently, all packages rely on define-module’s “global” #:use-module form. How about adding an alternative per-package, “local” use-module, to load and unload the dependent module just for this one package? It appears to be preferrable to splitting modules. Is it worth it? Regards, Florian