Subj. I believe Guile have two problems: -- error messages rarely mention, where real problem is -- they are also completely unreadable. Maybe situation with second can be improved, using (ice-9 pretty-print)? If I can plug it in, please tell me how, if I can't, maybe someone could make it possible? Offtopic: Is it any way to write macros to hell not break loose, if I use it wrong? Just encountered, just to illustrate my vision of problem. ice-9/psyntax.scm:2549:53: In procedure #: ice-9/psyntax.scm:2549:53: Syntax error: /home/kaction/devel/guile-bash/lisp/system/ffi.scm:297:2: syntax-case: invalid clause in form ((_ name (arg-clause ... -> ret)) (check-name (syntax name)) (with-syntax ((encoder (fmap pointer/encoder-name (syntax name))) (decoder (fmap pointer/decoder-name (syntax name))) (clauses (syntax (arg-clause ...))) ((a/name ...) (s-map clause/name clauses)) ((a/type ...) (s-map clause/type clauses)) ((d/name ...) (s-map clause/name (s-filter (lambda (x) (or (clause/const? x) (clause/normal? x))) clauses))) ((d/arg ...) (s-map clause/d/arg clauses)) (((prov/name . prov/type) ...) (s-map (lambda (x) (s-cons (clause/name x) (clause/type x))) (s-filter clause/provide? clauses))))) (syntax (begin (define encoder #f) (define decoder #f) (match ret (($ ret-decoder ret-encoder ret-type ret-size) (set! encoder (lambda (fn) (procedure->pointer ret-type (lambda (a/name ...) (ret-encoder (fn ((ffi-object-decoder a/type) a/name) ...))) (list a/type ...)))) (set! decoder (lambda (ptr) (define raw-proc (pointer->procedure ret-type ptr (list a/type ...))) (lambda (d/name ...) (with-provided-memory ((prov/type prov/name) ...) (define (ret-decoder (raw-proc d/arg ...))) (let ((provided ((list prov/name ...)))) (if (null? provided) (cons provided))))))))) (define-ffi-object name #:encoder encoder #:decoder decoder #:size (sizeof (quote *)))))) -- Best regards, Dmitry Bogatov , Free Software supporter, esperantisto and netiquette guardian. GPG: 54B7F00D