Regarding usage of #, I was just looking at some of @gchiu's code:
let data: unspaced [
surname "," firstnames space "(" opt title ")" space "DOB:" space dob space "NHI:" space nhi newline
street newline town newline city newline newline
"phone:" space opt phone newline
"mobile:" space opt mobile newline
"email:" space opt email
]
And I thought "hey, underscore is finally committed as the space rune, might as well use that":
let data: unspaced [
surname "," firstnames _ "(" opt title ")" _ "DOB:" _ dob _ "NHI:" _ nhi newline
street newline town newline city newline newline
"phone:" _ opt phone newline
"mobile:" _ opt mobile newline
"email:" _ opt email
]
And the # helps as well:
let data: unspaced [
surname "," firstnames _ "(" opt title ")" _ "DOB:" _ dob _ "NHI:" _ nhi #
street # town # city ##
"phone:" _ opt phone #
"mobile:" _ opt mobile #
"email:" _ opt email
]
Note you can even double it up if you like (## instead of # #) into a single token of two newlines.
_ seems fairly close to the "absence of anything in this spot", while # seems a bit like its nemesis... the "everything is filled in character".
If you were looking for a complement to "I'm actually invisible, and lightly separate" to be "I'm actually invisible, but heavily separate" you can't do too much better than this. They're tied together, in that "the two single character RUNE!s are invisible".
Of Course, Many Cases Want Interpolation...
Graham's code could be tackled with COMPOSE now...modulo some issues with leading whitespace that multiline strings should probably not include by default:
let data: compose2 '{} --[
{surname}, {firstnames} ({? title}) DOB: {dob} NHI: {nhi}
{street}
{town}
{city}
phone: {? phone}
mobile: {? mobile}
email: {? email}
]--
There's still some questions about how to get an optional substitution to be able to opt out of its surrounding boilerplate. For instance: how might ({? title}) ask to not only opt out of the contents of the parentheses, but opt out of the parentheses themselves... is there an easy way to do that?
But anyway, not all cases will be a fit for turning into interpolation, so I think the # as newline may be a usage that people would come to appreciate.