Consider adding first-class text syntax for streams
Sometimes it's difficult to talk about streams without getting confused with macros because right now, the only way to construct a stream is by using a macro (except for the top-level stream).
For the text encoding, I propose creating a new syntax to represent streams. One possibility is to create a "robot smile" ([:) that parallels the "smile expressions" ((:). Other possibilities include { followed by almost any punctuation or symbol character, or using (: followed by another punctuation or symbol character, for example ~ to form (:~. (For the rest of this writeup, I will use [:, but it does not necessarily have to be that specific syntax.)
For the binary encoding, streams can still be represented the same way as a system macro.
Implications for grouped parameters
In addition to making it easier to talk/write about streams, having a text syntax for streams also has the benefit of no longer requiring a delimiting list for the arguments of a grouped parameter in the text encoding. For example:
(macro ouch [(stuff [list])] …)
Without stream syntax—To avoid ambiguity, the delimiter is required even for singleton values. Without this rule, the E-expression (:ouch []) would be ambiguous whether the parameter was intended to be void or a singleton empty-list value.
With stream syntax—The E-expression (:ouch []) has a singleton empty-list value as its argument. The E-expression (:ouch [:]) has an empty stream (or void) as its argument.
Implications for (:values)
Since the (:values) macro is essentially the identity function of a stream, if we add stream syntax, we can eliminate the (:values) macro.
Defining a stream in a macro template definition can be done the same way as macro invocations. If the stream syntax is [:, a stream can be defined in a template using list syntax and lists can be escaped the same way that s-expressions are currently escaped. On the other hand, using something like (:~ for the stream syntax would mean that we could define a stream in a template using (~.
Another way of putting this is that values is such a fundamental piece in the macro system, that it deserves to have its own syntactical sugar.
A syntax for streams would only add confusion unless expression groups, streams, and the values macro can be unified. There is no inherent issue preventing these concepts from being merged, but the spec has continued to keep values, streams, and expression groups as separate concepts with subtle distinctions.