More to do, but this branch has probably run on long enough.
Lots of cross-references in macros and various other documentation improvements.
Notable non-documentation changes include
-> / ->> simplification and enhancement. No longer recursive, so the compiler won't insert as many comments. The wrapping () is now implied for non-tuple arguments, like Clojure. The implementations are not really any longer, despite the extra feature, due to simplifications. This did include some judicious use of injections (which are an implementation detail that don't appear in the expansions).
Replace deftype@ with @@#, a decorator reader macro. Turns out reader macros are easily powerful enough to implement the decorator sugar with a tag and extra, at least for the global def- forms, including define functions. Methods are a different story, but no worse than before.
Detect trailing :* in (@) and (#) forms. This is slightly too strict as e.g. (@ :* :*) now errors, but that had a reasonable interpretation of [':', '*'] before, but this is more likely to be a mistake than useful behavior, and there are other aliases that work fine (just quote it). Adding an exception for these cases didn't seem worth it.
More to do, but this branch has probably run on long enough.
Lots of cross-references in macros and various other documentation improvements.
Notable non-documentation changes include
()
is now implied for non-tuple arguments, like Clojure. The implementations are not really any longer, despite the extra feature, due to simplifications. This did include some judicious use of injections (which are an implementation detail that don't appear in the expansions).deftype@
with@@#
, a decorator reader macro. Turns out reader macros are easily powerful enough to implement the decorator sugar with a tag and extra, at least for the global def- forms, includingdefine
functions. Methods are a different story, but no worse than before.:*
in(@)
and(#)
forms. This is slightly too strict as e.g.(@ :* :*)
now errors, but that had a reasonable interpretation of[':', '*']
before, but this is more likely to be a mistake than useful behavior, and there are other aliases that work fine (just quote it). Adding an exception for these cases didn't seem worth it.