bug-guix
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#50349: [PATCH] packages: Add 'define-package' syntax.


From: Taylan Kammer
Subject: bug#50349: [PATCH] packages: Add 'define-package' syntax.
Date: Sat, 4 Sep 2021 16:29:49 +0200
User-agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.13.0

On 04.09.2021 12:09, Tobias Geerinckx-Rice via Bug reports for GNU Guix wrote:
> All,
> 
> To keep a link with previous ‘define-package’ discussion, I've merged this 
> bug with #15284.  It was never resolved IMO and things have changed since 
> 2013 with the label-less input style.
> 
> Maxime Devos 写道:
>> This could be even shorter in the special case that the variable name
>> and package name are the same (modulo types):
>>
>> (define-package "my-favorite-package"
>>   (version ...)
>>   ...)
> 
> (define-anything STRING ...) is just too weird to ack.  Are there any package 
> names that aren't currently valid symbols?  Is there a good reason for them?
> 
> Kind regards,
> 
> T G-R

To me the most obvious thing to do seems

  (define-package foo ...)  ;no explicit name needed

to bind the variable 'foo' and use symbol->string for the name of the
package, with the possibility to override the name like

  (define-package foo (name "foobar") ...)

which would bind the variable 'foo' to a package named "foobar".

Here's a syntax-case definition:

  (define-syntax define-package
    (lambda (stx)
      (syntax-case stx ()
        ((_ <name>
           (<field> <value> ...)
           ...)
         (if (memq 'name (map syntax->datum #'(<field> ...)))
             #'(define-public <name>
                 (package
                   (<field> <value> ...)
                   ...))
             #`(define-public <name>
                 (package
                   (name #,(symbol->string (syntax->datum #'<name>)))
                   (<field> <value> ...)
                   ...)))))))

-- 
Taylan





reply via email to

[Prev in Thread] Current Thread [Next in Thread]