On Mon, Oct 20, 2025 at 11:42:59AM +0200, Felix Winkelmann wrote:
> On Sun Oct 19, 2025 at 9:56 PM CEST, Diogo via Chicken-users wrote:
> > The symbol foo is being exported in the module crunch-example, why can't I
> > access it in the top level? Am I missing something?
> 
> The mapping of exported toplevel names inside crunched code to
> qualified names in the outer Scheme environment is a bit tricky
> and may be buggy, I'll investigate this. In the meantime you can
> move the crunching into the module, as a workaround, which is
> also (IMHO) somewhat more in the style as this is intended to be
> used:
> 
> (module crunch-example (foo)
>   (import (scheme base))
>   (import (crunch))
>   (crunch (define (foo) 123)))
> 
> (import (scheme write))
> (import crunch-example)
> (display (foo))
> (newline)

I will try this. By intended style, you mean crunching small pieces of
code in a larger chicken program/module?

Probably I am stretching crunch beyond its intended use. This demo
project has a few crunch modules such as ps2-decoder, matrix-scanner,
usb-serial, etc for a microcontroller firmware. The modules are
defined in separate files and imported in a main.scm, which again
is a crunch program. All compiles ok. No chicken, only crunch.

Most modules can also be compiled to the host architecture (amd64)
and I wanted to test them there.  The intent of importing crunch
modules in chicken was to have some nice unit testing.

Alternatively, I could split the modules in implementation (.scm)
and module definition (.sld) and include the former in the latter.
Then in the chicken tests, I could  (crunch (include "former.scm")).
Not sure if that would help though. What would be your recommendation?

> > (error ...) does not do what I'd expect. Consider this example:
> 
> As siiky pointed out, the argument must be a string. I will clarify
> this in the docs.

Yeah, my bad. Thanks to you both.

Cheers,
-d 

Reply via email to