services: Service types can now specify a default value for instances.

* gnu/services.scm (&no-default-value): New variable.
(<service-type>)[default-value]: New field.
(<service>): Rename constructor from 'service' to 'make-service'.
(service): New macro.
(%service-with-default-value): New procedure.
(&missing-value-service-error): New error condition.
* tests/services.scm ("services, default value"): New test.
* doc/guix.texi (Service Types and Services): Document 'default-value'.
(Service Reference): Explain default values.
This commit is contained in:
Ludovic Courtès 2017-04-15 23:53:23 +02:00
parent f816dba680
commit 1bb895eabf
No known key found for this signature in database
GPG key ID: 090B11993D9AEBB5
3 changed files with 103 additions and 9 deletions

View file

@ -31,6 +31,17 @@
(test-begin "services")
(test-equal "services, default value"
'(42 123 234 error)
(let* ((t1 (service-type (name 't1) (extensions '())))
(t2 (service-type (name 't2) (extensions '())
(default-value 42))))
(list (service-value (service t2))
(service-value (service t2 123))
(service-value (service t1 234))
(guard (c ((missing-value-service-error? c) 'error))
(service t1)))))
(test-assert "service-back-edges"
(let* ((t1 (service-type (name 't1) (extensions '())
(compose +) (extend *)))