On Sat, 11 Sep 2021, paul <p...@inktvis.org> wrote: > In Guile land, that works great. Now, i want to create a foo in C > and pass it to a function in the Guile script. I do something > like the following: > > ``` > scm_c_primitive_load("foo.scm"); > scm_call_5(scm_variable_ref(scm_c_lookup("make-foo")), > scm_from_utf8_string("blah"), > scm_from_int32(Int32(42))) > ``` > > However, this results in an error: > > guile: uncaught exception: > Wrong type to apply: #<syntax-transformer make-foo>
Seems like `make-foo` is a syntax-transformer and not a procedure. You can not call a syntax-transformer. I don't think you can do much with a syntax-transformer in C. > > I've tried with and without (define-module foo) at the top of the > file, that doesn't seem to make a difference. I've been able to > work around the issue by defining a wrapper (define (foo-prime a > b) (make-foo a b)) and using that in C as shown above, but that > feels ugly. I'm probably missing something obvious, but trawling > the mailing list didn't turn up anything i could understand. By making a wrapper, you're effectively creating a procedure that can use the `make-foo` syntax because it's in Scheme and it's solved a expansion time. -- Olivier Dion Polymtl