[plt-scheme] define/public doesn't like my macro
Hi all,
I usually have to define a function which depends on the type of the
first argument so I sketched the following macro a long time ago which
is part of my utils and have been using without problems:
(define-syntax type-lambda
(syntax-rules ()
[(type-lambda (arg ...) (p l) ...)
(lambda (arg ...)
(let ([testarg (first (list arg ...))])
(let loop ([preds (list p ...)]
[thunks (list l ...)])
(cond [(null? preds)
(error 'type-lambda
"No predicate passed was able to handle: ~a~n"
testarg)]
[((first preds) testarg)
((first thunks))]
[else
(loop (rest preds)
(rest thunks))]))))]))
Now I'm trying to use it inside a method:
(define test
(type-lambda (x)
(string? (lambda () "String"))
((lambda (t) #t) (lambda () "Something else"))))
This works... a private method but this...
(define/public test
(type-lambda (x)
(string? (lambda () "String"))
((lambda (t) #t) (lambda () "Something else"))))
doesn't!
class: bad form for method definition in: (type-lambda (x) (string?
(lambda () "String")) ((lambda (t) #t) (lambda () "Something else")))
Any ideas why?
--
Paulo Jorge Matos - pocm at sat inesc-id pt
Web: http://sat.inesc-id.pt/~pocm
Computer and Software Engineering
INESC-ID - SAT Group