Hi nee, nee skribis: >>> +(define murmur-shepherd-service >>> … >> Use the accessors instead. >> > Right, that grew way too big. I removed most of the match blocks. > I like having the short names when it comes to stitching together the > actual config though, so I kept that one. > If that's still a no-go I'll make another update with accessors. > > If the main problem here is the positional binding, is there a function > to match record fields by name that I could use instead? Unfortunately no. > It doesn't seem like it would be too complicated to write a macro for > this with the record-accessor procedure from srfi-9. Indeed. I figured something like this works: --8<---------------cut here---------------start------------->8--- scheme@(guile-user)> (define-syntax match-record (syntax-rules () ((_ record type (field fields ...) body ...) (if (eq? (struct-vtable record) type) (let ((field ((record-accessor type 'field) record))) (match-record record type (fields ...) body ...)) (throw 'wrong-type-arg record))) ((_ record type () body ...) (begin body ...)))) scheme@(guile-user)> (match-record coreutils (@@ (guix packages) ) (home-page) home-page) $6 = "https://www.gnu.org/software/coreutils/" scheme@(guile-user)> (match-record coreutils (@@ (guix packages) ) (home-page synopsis) (list synopsis home-page)) $7 = ("Core GNU utilities (file, text, shell)" "https://www.gnu.org/software/coreutils/") --8<---------------cut here---------------end--------------->8--- We could use that for now. Eventually though, we should have something better in (guix records) that (1) computes indices and report wrong-field-name errors at expansion time, and (2) accounts for thunked/delayed fields. WDYT? If the above macro is good enough, we can add it to (guix records) with a TODO comment. That would already be better than the other options. > I also noticed a missing equal sign after rememberchannel in the > defaultconfig and added that. I noticed a couple of obvious mistakes: