From a3d37f3ae5c7e07b981196b671e213692b554ad9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 8 Nov 2017 13:24:24 +0100 Subject: services: 'fold-service-types' honors its seed. * gnu/services.scm (fold-service-types): Use SEED instead of '(). --- gnu/services.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'gnu/services.scm') diff --git a/gnu/services.scm b/gnu/services.scm index 50be28a382..89c5d52c83 100644 --- a/gnu/services.scm +++ b/gnu/services.scm @@ -184,7 +184,7 @@ is used as the initial value of RESULT." (if (service-type? object) (proc object result) result)) - '() + seed modules)) ;; Services of a given type. -- cgit v1.2.3 From 3943913faca20854453cb873144e2844a07ac31f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 8 Nov 2017 13:25:04 +0100 Subject: services: 'fold-service-types' includes (gnu services). * gnu/services.scm (all-service-modules): New procedure. (fold-service-types): Use it for the default MODULES value. --- gnu/services.scm | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'gnu/services.scm') diff --git a/gnu/services.scm b/gnu/services.scm index 89c5d52c83..df1bedeb9b 100644 --- a/gnu/services.scm +++ b/gnu/services.scm @@ -175,9 +175,14 @@ (make-parameter `((,%distro-root-directory . "gnu/services") (,%distro-root-directory . "gnu/system")))) +(define (all-service-modules) + "Return the default set of service modules." + (cons (resolve-interface '(gnu services)) + (all-modules (%service-type-path)))) + (define* (fold-service-types proc seed #:optional - (modules (all-modules (%service-type-path)))) + (modules (all-service-modules))) "For each service type exported by one of MODULES, call (PROC RESULT). SEED is used as the initial value of RESULT." (fold-module-public-variables (lambda (object result) -- cgit v1.2.3 From 49483f71381ad32cdbe81b1c8ed2cc023329cc18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ludovic=20Court=C3=A8s?= Date: Wed, 8 Nov 2017 13:26:08 +0100 Subject: services: Add 'lookup-service-types'. * gnu/services.scm (lookup-service-types): New procedure. * tests/services.scm ("lookup-service-types"): New test. --- gnu/services.scm | 11 +++++++++++ 1 file changed, 11 insertions(+) (limited to 'gnu/services.scm') diff --git a/gnu/services.scm b/gnu/services.scm index df1bedeb9b..016ff08e0b 100644 --- a/gnu/services.scm +++ b/gnu/services.scm @@ -55,6 +55,7 @@ %service-type-path fold-service-types + lookup-service-types service service? @@ -192,6 +193,16 @@ is used as the initial value of RESULT." seed modules)) +(define lookup-service-types + (let ((table + (delay (fold-service-types (lambda (type result) + (vhash-consq (service-type-name type) + type result)) + vlist-null)))) + (lambda (name) + "Return the list of services with the given NAME (a symbol)." + (vhash-foldq* cons '() name (force table))))) + ;; Services of a given type. (define-record-type (make-service type value) -- cgit v1.2.3