When I first made SIGIL!, I was trying to make every element have an answer to the SIGIL OF question. Note that plain types return null:
>> sigil of first [@foo]
== @
>> sigil of first [foo]
== ~null~ ; anti
In pondering whether SIGIL! should carry a binding, I realized that two of the SIGIL! we had were just bad ideas.
>> sigil of first [~foo~]
== ~~
>> sigil of first [''foo]
== '
These had always been dicey. Clearly the quasiform sigil can't be just ~
as that's quasiform blank, so the "weird" compromise was to have it be two tildes, to reflect that usually (except in the case of quasiform blank) you have two tildes.
And then there's the dodginess of answering the number of quotes for the quote sigil:
>> quotes of first [''foo]
== 2
>> quotes of first [']
== 1
>> quotes of first ['']
== 1
So I decided to kill these. Asking for SIGIL OF on a QUOTED! or QUASIFORM! will raise an error. Since it's a raised error and not a failure, you can use TRY to get nullptr.
>> sigil of first [''@foo]
** Error: Can't take SIGIL OF a quoted type
>> try sigil of first [''@foo]
== ~null~ ; anti
>> sigil of noquote first [''@foo]
== @
No Legal Meaning As Value Means Other Purposes Available
Since we know that '
doesn't sanely represent a value, it could signal something to the scanner, or to the reader.
Maybe it could be useful for line continuations.
reverse copy imagine-writing your-long-line-here append [a b c]
' [d e f]
I've struggled with that question of how to know when a line is being continued. And if we know that ' means nothing due not being able to quote nothing, it could be used for that. And perhaps it would cue the scanner to not do a new-line
>> load --{reverse copy imagine-writing your-long-line-here append [a b c]
' [d e f]}--
== reverse copy imagine-writing your-long-line-here append [a b c] [d e f]
This would mean that if your code applied significance to newlines, you could work around it and get the behavior you want for things being all on one line, even if you don't write it that way.
The idea here would be that it would be specifically legal only on newlines, so you couldn't write:
block: [' ' '] ; would be an error
As for ~~
, it may be that it's a quasiform of a "length two" blank. Allowing blanks to have a length is an old debate:
Should literal BLANK! be one, or two underscores? - #14 by hostilefork
Hence I Think Keeping A List Is Good
A list of things that have no meaning is a good resource for when you want to do something out of band.
Another thing I'll throw out as having no meaning is backslash. But I also think that it's important to leave some room for not definiing things, so that preprocessing tasks or other trickery have some choices to put their own escapes into the code.