help-guix
[Top][All Lists]
Advanced

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

how to fix this G-exp?


From: zimoun
Subject: how to fix this G-exp?
Date: Fri, 23 Sep 2022 19:26:20 +0200

Hi,

I am missing something and I do not find my way, so maybe someone could
explain me what I am doing wrong.

Let start with this example.

--8<---------------cut here---------------start------------->8---
(use-modules (srfi srfi-1)
             (ice-9 match)
             (guix packages)
             (gnu packages))

(define (package+propagated-inputs package)
  (match (package-transitive-propagated-inputs package)
    (((labels packages) ...)
     (cons package packages))))


(define (something)
  42)


(define (an-example)

  (define build
    (with-extensions (package+propagated-inputs
                      (specification->package "guile-json"))
      (with-imported-modules '((guix build utils)
                               (json))
        #~(begin
            (use-modules (guix build utils)
                         (json))

            (define that
              #+(something))

            (define file-name
              (string-append #$output "/example.json"))

            (mkdir-p (dirname file-name))

            (with-output-to-file file-name
              (lambda ()
                (scm->json that)))

            ))))

  (computed-file "example-json"
                 build))

(manifest
 (list (manifest-entry
         (name "bang")
         (version "0")
         (item (an-example)))))
--8<---------------cut here---------------end--------------->8---


Then

    guix build -m /tmp/example.scm

produces something

    cat /gnu/store/zsqg38qkwhjbhfl4hkhsb4288rbnxxic-example-json/example.json
    42


Let remove the scm->json part and focus on what I do not understand:
’something’.

For instance, if instead something returns a list,

--8<---------------cut here---------------start------------->8---
--- /tmp/example.scm    2022-09-23 19:11:34.769456052 +0200
+++ /tmp/example-fail.scm       2022-09-23 19:16:30.018780090 +0200
@@ -10,7 +10,7 @@
 
 
 (define (something)
-  42)
+  (list 42))
 
 
 (define (an-example)
@@ -32,9 +32,6 @@
 
             (mkdir-p (dirname file-name))
 
-            (with-output-to-file file-name
-              (lambda ()
-                (scm->json that)))
 
             ))))
 --8<---------------cut here---------------end--------------->8---

then I get this error,

--8<---------------cut here---------------start------------->8---
Backtrace:
           3 (primitive-load "/gnu/store/vd87i0gf8f48kvcwm2c4796cmsn?")
In ice-9/eval.scm:
    619:8  2 (_ #f)
   626:19  1 (_ #<directory (guile-user) 7fffeffcfc80>)
Exception thrown while printing backtrace:
In procedure frame-local-ref: Argument 2 out of range: 1

ice-9/eval.scm:626:19: Wrong type to apply: 42
--8<---------------cut here---------------end--------------->8---

hum, maybe it is because a slice or something.  Let replace #+ by #+@
abd the backtrace is fixed.  Then, let add an item to the list,

--8<---------------cut here---------------start------------->8---
 (define (something)
-  42)
+  (list 42 43))


             (define that
-              #+(something))
+              #+@(something))
--8<---------------cut here---------------end--------------->8---

then bang

--8<---------------cut here---------------start------------->8---
ice-9/psyntax.scm:2794:12: In procedure syntax-violation:
Syntax error:
/gnu/store/zwizrn4xacyn2ynpnb5i2wgqvjj15rwa-example-json-builder:1:47: source 
expression failed to match any pattern in form (define that 42 43)
--8<---------------cut here---------------end--------------->8---


I would like that my procedure ’something’ returns a list, so I would
like that ’that’ would also be a list.  Because I would like to feed
scm->json with a list.

I have tried various things (list of list, slice or not, etc.) and I am
missing a point for understanding.  Could someone explain me?


Thanks in advance.


Cheers,
simon



reply via email to

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