[racket] Expander vs Reader layer and general Macro advice

From: Scott Klarenbach (scott at pointyhat.ca)
Date: Sun Sep 8 15:29:20 EDT 2013

So in an attempt to improve my understanding of Racket Macros, I thought
I'd implement the following syntax change to Racket:  Introduce an
alternative syntax for pairs where they are delimited by ':' in addition to
' . ', ie:

"a":"b" => '("a" . "b")

Seemed simple enough.  I hooked into #%top, split any identifiers on ":"
and reconstructed the syntax.  I also always quote the left match which
catches unbound identifiers ala javascript style object keys.

But, now I want

1:2 => '(1 . 2)
"1":2 => '("1" . 2)

Doing a regex-match loses the original typing information unless I
(manually?) store it before symbol->string conversion.  What's worse, I
also want:

(define x 3)
k:x => '(k . 3)

But my naive approach loses the binding information along with the typing.

My questions are:

1.)  Is my strategy wrong?  Should I just tell the Reader to convert any
x:y into (cons x y) and let the expander figure out the rest?  Are there
general guidelines to follow in this regard?  (Syntax => Reader, Semantics
=> Expander)??

2.)  If I stick with macros, what tactics should I be using to avoid the
problems I have above?

I'm sure that binding/typing information is a basic concern well addressed
by Racket.  I've dug through the
bound-identifier=?<http://docs.racket-lang.org/reference/stxcmp.html#%28def._%28%28quote._~23~25kernel%29._bound-identifier~3d~3f%29%29>
stuff
a bit, but my understanding is clearly lacking and before I go about
reconstructing lexical information ad-hoc I thought I'd post this as a
sanity check to point me in the right direction.

Thanks for your help.

-- 
Talk to you soon,

Scott Klarenbach

PointyHat Software Corp.
www.pointyhat.ca
p 604-568-4280
e scott at pointyhat.ca
200-1575 W. Georgia
Vancouver, BC V6G2V3

_______________________________________
To iterate is human; to recur, divine
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.racket-lang.org/users/archive/attachments/20130908/03ffa1d1/attachment.html>

Posted on the users mailing list.