There's a new mechanism now for escaping GROUP!s in your code that you want preserved during a COMPOSE. Just use an apostrophe:
>> compose [(1 + 2) '(1 + 2) ''(1 + 2)] == [3 (1 + 2) '(1 + 2)]
If you're doing more substitutions than not, you may appreciate being able to mark the occasional GROUP! with the backslash as a "do not compose" indicator.
But one of the good things about templating is to be able to write most of your code normally, and then point out just the parts you want to substitute. So if you're using so many groups that just being in a GROUP! isn't distinguishing what you want to substitute, tagged COMPOSE to the rescue:
>> compose <*> [(1 + 2) (<*> 1 + 2) (1 + 2)] == [(1 + 2) 3 (1 + 2)]
The TAG! has to be given literally between the COMPOSE and the expression you want to compose. (This is a requirement for
<skip>-ability. But you can pick any tag you like. Currently it is matched case-sensitively.
Doubled-groups still have /ONLY semantics:
>> x: [a b c] >> compose <$> [(1 + 2) (<$> reverse copy x) ((<$> reverse copy x)) ((1 + 2))] == [(1 + 2) c b a [c b a] ((1 + 2))]
You don't have to use symbols...any tag will do. Could be a whole word with meaningful names, which might be valuable if you were doing it in several steps...where earlier phases could leave tags for later phases to compose. You might also tag with numbers,
For now this is limited to just TAG!. It could be other inert types (like ISSUE! or TEXT!) but there doesn't seem to be a great reason to encourage that.