unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
From: Andrew Tropin via Guix-patches via <guix-patches@gnu.org>
To: Richard Sent <richard@freakingpenguin.com>
Cc: ludo@gnu.org, 71111@debbugs.gnu.org
Subject: [bug#71111] [PATCH 0/1] services: home: Use pairs instead of lists.
Date: Thu, 23 May 2024 09:45:02 +0400	[thread overview]
Message-ID: <874jap13q9.fsf@trop.in> (raw)
In-Reply-To: <87cypdwmyi.fsf@freakingpenguin.com>

[-- Attachment #1: Type: text/plain, Size: 3135 bytes --]

On 2024-05-22 17:33, Richard Sent wrote:

> Andrew Tropin <andrew@trop.in> writes:
>
>> After rewriting from car/cdr to match-lambda in v2 of this patch:
>> https://yhetil.org/guix-patches/3394b0b51f6a5a608ebcfb7a63fdc34e52fe928e.1711046203.git.richard@freakingpenguin.com/
>>
>> the format changed from pairs to lists, I didn't noticed this nuance
>> during review because the documentation still says that service should
>> be configured and extended with pairs.  Also, pairs are more
>> apropriate data type here.  And this match-lambda rewrite will break
>> downstream RDE user's setups after migrating to upstreamed version of
>> service.
>>
>> That's why I propose to go back to pairs.
>>
>
> I'm not opposed to going back to cons cell pairs. I didn't put too much
> thought in a "list of two elements" vs. "cons cell" besides the match
> statement being easier to handle with a list.
>
> Would this patch have unintended side effects? I thought the . in match
> conditions had a different behavior.
>
> --8<---------------cut here---------------start------------->8---
> scheme@(guile-user)> (match '(1 2 3 4)
>                        ((a . b) b))
> $5 = (2 3 4)
> scheme@(guile-user)> (match '(1 2)
>                        ((a . b) b))
> $6 = (2)
> scheme@(guile-user)> (match '(1 . 2)
>                        ((a . b) b))
> $7 = 2
> --8<---------------cut here---------------end--------------->8---
>
> So changing to this would allow for a home-service entry like the
> following to match:
>
> --8<---------------cut here---------------start------------->8---
> (simple-service 'my-extra-home home-service-type
>                 `(("bob" "bill" "bertha" "billyanne" ,my-extra-home ,my-home-2)))
> --8<---------------cut here---------------end--------------->8---
>
> From my testing, this /will/ error (yay), but not as soon as the match
> would with the current code. Instead of being caught before being passed
> to the daemon, it seems to be caught while lowering the invalid
> file-append object.
>
> Personally I would prefer to catch as many errors as possible before
> beginning to pass code off to the daemon where possible. Generally
> speaking it feels like pre-daemon errors are easier to mentally parse.
>
> In fairness, the current code also isn't trying particularly hard to
> check that "user" is a string and "he" is a home-environment or printing
> a fancy error message.
>
> Perhaps this would work?
>
> --8<---------------cut here---------------start------------->8---
> (define-module (gnu services guix)
>   ...
>   #:use-module (gnu home))
> ...
> (define (guix-home-shepherd-service config)
>   (map (match-lambda
>          (((? string? user) . (? home-environment? he))
>           (shepherd-service
>            ...
>            ))
>          (e (error "Invalid value for guix-home-shepherd-service: " e)))
>        config))
> --8<---------------cut here---------------end--------------->8---

This idea is good, I'll incorporate this into v2.

>
> Maybe I'm just being silly. 🙂

-- 
Best regards,
Andrew Tropin

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 832 bytes --]

  reply	other threads:[~2024-05-23  5:46 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-05-22 10:02 [bug#71111] [PATCH 0/1] services: home: Use pairs instead of lists Andrew Tropin via Guix-patches via
2024-05-22 10:02 ` [bug#71112] [PATCH 1/1] " Andrew Tropin via Guix-patches via
2024-05-22 11:06 ` [bug#71111] " Andrew Tropin via Guix-patches via
2024-05-22 21:33 ` [bug#71111] [PATCH 0/1] " Richard Sent
2024-05-23  5:45   ` Andrew Tropin via Guix-patches via [this message]
2024-05-23  3:38 ` Zheng Junjie
2024-05-23  5:43   ` Andrew Tropin via Guix-patches via
2024-05-23 16:02     ` Maxim Cournoyer
2024-05-23  5:53 ` [bug#71111] [PATCH v2 " Andrew Tropin via Guix-patches via
2024-05-23  5:53 ` [bug#71111] [PATCH v2 1/1] " Andrew Tropin via Guix-patches via
2024-05-23  9:16   ` Ludovic Courtès
2024-05-23 13:06     ` Andrew Tropin via Guix-patches via
2024-06-02  9:50 ` [bug#71111] [PATCH 0/1] " Andrew Tropin via Guix-patches via
2024-06-02 10:15   ` Ludovic Courtès
2024-06-02 10:37     ` Efraim Flashner
2024-06-02 11:12       ` Andrew Tropin via Guix-patches via
2024-06-02 10:57     ` Andrew Tropin via Guix-patches via

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=874jap13q9.fsf@trop.in \
    --to=guix-patches@gnu.org \
    --cc=71111@debbugs.gnu.org \
    --cc=andrew@trop.in \
    --cc=ludo@gnu.org \
    --cc=richard@freakingpenguin.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).