Hi Olivier,

Olivier Dion <[email protected]> writes:

> On Sun, 03 May 2026, Tomas Volf <[email protected]> wrote:
>> Hello,
>>
>> I am trying to figure out how to define a procedure based on a list of
>> fields of some record.  I know I can get list of fields for some record
>> using `record-type-fields', but I do not know how to do that in a
>> syntax-case, since I just see identifier <foo>, but do not know how to
>> get the binding.
>
> You need to have the record definition available at expansion time.
> BLUE kinds of do something like this [0] so it can raise an exception if
> a field that is not valid for a type is passed.  For this, the
> definition is evaluated during the expansion.  This is necessary because
> BLUE types can inherit from parent types and so fields are not just part
> of the type definition itself.  Note that this is not stricly necessary
> if you import the type from another module, since then the definition is
> available during expansion.  But if the definition is in the same
> module, you need to force evaluation during the expansion to get it
> define.
>
> I guess you could also do something similar to what define-module do :
>
> ice-9/boot.scm:
>  3978          #'(eval-when (expand load eval)
>  3979              (let ((m (define-module* '(name name* ...)
>  3980                         #:filename filename quoted-arg ...)))
>  3981                (set-current-module m)
>  3982                m)))))))
>
> so that the defined module is available at expansion time throught 
> (current-module).
>
> [0] 
> https://codeberg.org/lapislazuli/blue/src/commit/273e31d8ef3932384f11fd5ac6915c2ac8dffbed/blue/oop.scm#L303

Well, this took me much longer than expected, but I finally have a
working version of `define-record-matcher':

--8<---------------cut here---------------start------------->8---
(eval-when (expand load eval)
  (define-record-matcher match-request (@@ (web request) <request>)))

(match-request req (method uri)
  (format #t "~s ~s~%" method uri))
--8<---------------cut here---------------end--------------->8---

So I just wanted to thank you for the pointers above.  ^_^

Have a nice day,
Tomas

-- 
There are only two hard things in Computer Science:
cache invalidation, naming things and off-by-one errors.

Reply via email to