(use-modules (ice-9 vlist) (ice-9 match) (gnu packages) (gnu packages curl)) (define-values (package-by-address register-package) (let ((table (delay (fold-packages (lambda (package table) (vhash-consq (object-address package) package table)) vlist-null)))) (values (lambda (address) "Return package by its object ADDRESS." (match (vhash-assq address (force table)) ((_ . package) package) (_ #f))) (lambda (package) "Register PACKAGE by its 'object-address', so that later 'package-by-address' can be used to access it." (set! table (delay (vhash-consq (object-address package) package (force table)))))))) (register-package curl) ;; This expressions errors: (package-by-address (object-address curl))