[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#37586: Import cycles in unrelated packages should not be an error
From: |
pelzflorian (Florian Pelz) |
Subject: |
bug#37586: Import cycles in unrelated packages should not be an error |
Date: |
Sun, 6 Oct 2019 12:40:14 +0200 |
User-agent: |
NeoMutt/20180716 |
On Sun, Oct 06, 2019 at 12:00:27PM +0200, Ludovic Courtès wrote:
> "pelzflorian (Florian Pelz)" <address@hidden> 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