|Hi! I just added a new feature to Anarki. Now you can write a Racket module like so:|
The (:provide ...) line is neither Arc code nor Racket code. It's just a file header, the easiest syntax I could think of to let an Arc-based library have simple Racket exports. Note that at this point it only exports values, not syntaxes, so you can't write a macro in Arc and call it from Racket. Also, Anarki programs still clobber one giant shared global scope, so this is really only for the benefit of letting Anarki modules blend in among a bunch of other Racket imports. If you have nothing in your Anarki module that you particularly want a Racket program to be able to (require ...), you can simply write (:provide) with no variables.
(:provide foo bar baz)
; Arc code
(= foo 1)
(= bar 2)
(= baz 3)
As a makeshift unit test, I've written a network of "hello world" modules in Anarki's lib/racket-lang-demo/ directory. They demonstrate how #lang racket modules, #lang anarki modules, and traditional Anarki files can all use a #lang anarki module and vice versa:
I was studying how to make a Racket #lang, and this project seemed like a good way to give Arc something that it's been missing for a while. :)
 Using raw Arc macros from Racket would be a bit unsatisfying anyway. Arc macros expect their subexpressions to be Arc subexpressions, so the Racket program would have to use some kind of quasiquotation-like cruft to switch back to Racket syntaxes.