Maxim Cournoyer writes: > Hi Tomas, > > I was about to merge this, but I have one last (I promise!) question, see > below. No problem, I appreciate the review, it lead to higher code quality of this series. > > Tomas Volf <~@wolfsden.cz> writes: > > [...] > >> +(define apcupsd-service-type >> + (service-type >> + (name 'apcupsd) >> + (description "Configure and optionally start the apcupsd.") >> + (extensions (list (service-extension activation-service-type >> + apcupsd-activation) >> + (service-extension shepherd-root-service-type >> + apcupsd-shepherd-services) >> + (service-extension pam-root-service-type >> + apcupsd-pam-extensions))) >> + (compose identity) >> + (extend (lambda (cfg lst) >> + (fold (cut <> <>) cfg lst))) > > What does the above extend does? I find the (cut <> <>) particularly > cryptic, as it's typically used to specialize procedures, which there > are none above. I consider the behavior of the default #f value for extend field to be unfortunate, so I prefer to specify extend for all my services. Yet in this case there is no obvious thing to extend, so I opted for the extension to be a procedure, taking in the configuration and returning, possibly modified, configuration. The (cut <> <>) is just a handy, more concise way to write (lambda (proc arg) (proc arg)). What are your thoughts here? Should I just drop both compose and extend from here? Or is it fine like this? Tomas -- There are only two hard things in Computer Science: cache invalidation, naming things and off-by-one errors.