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?


Reply via email to