Hi, Am Sonntag, den 21.11.2021, 01:12 +0100 schrieb Jelle Licht: > What about something such as the following? > > --8<---------------cut here---------------start------------->8--- > (use-modules (gcrypt base16) > (gcrypt pk-crypto)) > > (define-record-type <canonical-sexp-wrapper> > (canonical-sexp-wrapper name sexp) > canonical-sexp-wrapper? > (name canonical-sexp-wrapper-name) > (sexp canonical-sexp-wrapper-sexp)) > > (define-gexp-compiler (canonical-sexp-wrapper-compiler > (wrapper <canonical-sexp-wrapper>) system > target) > (match wrapper > (($ <canonical-sexp-wrapper> name sexp) > (text-file name (canonical-sexp->string > (sexp->canonical-sexp sexp)) '())))) > --8<---------------cut here---------------end--------------->8--- > > This would still leave constructing your s-expression as an exercise > to the reader, which is definitely not amazing. In this specific > instance, I had to look at the output of canonical-sexp->sexp, which > is of course whatever the opposite of discoverable and good UX :). Apart from the name "-wrapper" instead of "-file", I think this would be acceptable. I think we ought to handle two cases here, though: one with sexp being a sexp, and one with it being a canonical sexp.
> For the Ed25519 key: > --8<---------------cut here---------------start------------->8--- > (define my-public-key > (canonical-sexp-wrapper > "my-key.pub" > `(public-key > (ecc > (curve Ed25519) > (q ,(base16-string->bytevector > (string-downcase > "C9F307AE..."))))))) > --8<---------------cut here---------------end--------------->8--- > > To improve on this, is one sexp-based-gexp-compiler + N helper > functions to construct the most-used value types a direction worth > exploring? I think we would probably want to improve on this end in the guile- gcrypt module, i.e. have a public-key "constructor" that returns a canonical-sexp and so on. WDYT?