niedz., 20 lis 2022 o 23:41 Per Bothner napisaƂ(a): > > > On 11/19/22 06:37, Panicz Maciej Godek via Kawa wrote: > > When I try to use this code from yet another module -- more specifically, > > this one: > > > > > https://github.com/panicz/grasp-android/blob/master/stages/retreat/GRASP/src/panel.scm#L130 > > > > as > > > > (define-mapping (on-key-press code) never) > > > > I get the error message > > > > define-constant is only allowed in a > > > > but when I use the expanded version > > > > (define on-key-press (mapping (code) never)) > > > > everything works. > > > > I wonder what could be the reason of Kawa's behavior. > > Kawa is presumably complaining that the define-early-constant is > in a non- context. > > This is allowed: > (begin (define-early-constant ...) ...) > > This is not: > (list (define-early-constant ...) ...) > > One of the problems with Scheme S-expression-based syntax is that > it is sometimes tricky to tell what parenthesis does what. > For example, it is easy to end up with this after some macro-expansion: > > ((define-early-constant ...)) > > I understand this message the way you explained it -- it just doesn't make sense in my context. There seems to be an issue with module dependency resolution. The problematic expansion was in the (panel) module. It contains a dependency on the (mapping) module. The main module (either grasp-terminal.scm or grasp-desktop.scm) included (import (panel)), and the compilation failed with the above message. But when I add (import (mapping)) to the main module -- before the (import (panel)) clause -- the compilation succeeds. (However, if I add it after (import (panel)) -- it still breaks). I realized that I ran into that problem early on during my work, but instead of reporting it, I just started including module dependencies transitively in the "right order". This is a workaround, but I think that there might be some issue between reflection, macro expansion and module dependency loading. I'll let you know if I manage to find a minimal set of modules which break in this way.