> > +(define-module (guix build-system mix) > > + #:use-module (gnu packages base) > > + #:use-module (gnu packages elixir) > > + #:use-module (gnu packages elixir-xyz) > > + #:use-module (gnu packages erlang) > You probably want to resolve those imports rather than use-modules > them. You mean something like this? #+begin_src scheme (define-module (guix build-system mix) #:use-module ((gnu packages base) #:select (glibc make-glibc-utf8-locales)) #:use-module ((gnu packages elixir) #:select (elixir elixir-hex)) #:use-module ((gnu packages erlang) #:select (rebar3)) #+end_src I have moved `elixir-hex' to elixir.scm to avoid a circular dependency. > > +(define (input=? input1 input2) > > + "Tell whether inputs INPUT1 and INPUT2 are equal." > > + (define pkg1 (match input1 ((_ pkg) pkg))) > > + (define pkg2 (match input2 ((_ pkg) pkg))) > > + (string=? (package-name pkg1) (package-name pkg2))) > Again, checking for label equivalence is a bad idea. OK, after reading a bit more about Guile, I understand that `equal?' is what should be used here, right? The intent is to remove duplicated inputs in the code below: #+begin_src scheme (define all-propagated-inputs ((compose (cut delete-duplicates <> equal?) ;<-- Here (cut filter erlang-or-elixir-input? <>) (cut append-map package-transitive-propagated-inputs <>) (cut map cadr <>)) (append inputs native-inputs))) #+end_src > > +(define (elixir-input? X.Y input) > > + "Determines if the given INPUT is an Elixir input." > > + (match input > > + ((label . path) > > + ;; XXX: The second condition may be enough. > > + (and (elixir-name? label) > > + (directory-exists? (path->elixir-lib path X.Y)))))) > Ahem, search-path-as-list. > Also, leaking the version is kinda bad, API-wise. Does this mean that build artifacts should be installed under `$out/lib/elixir/$libname` instead of `$out/lib/elixir/X.Y/$libname`? Cheers