The term "string" here includes both character string and integer constants. Strings in Russell consist either of a sequence of non-operator characters starting with a digit, or of any sequence of characters enclosed in double quotes. In the latter case, the following escape sequences are recognized: \t A tab character \n A newline (LF) character \r A carriage return character \c where c is none of the above, stands for c "" A single quote character Technically strings must always be selected from a type, but this type can usually be inferred by the compiler. The string "abc" is viewed as shorthand for the constants 'a', 'b', and 'c' concatenated. That is, it is viewed as (('' ^* 'a'[]) ^* 'b'[]) ^* 'c'[] where '', 'a', 'b', 'c', and ^* must all be present in the type from which the string is selected. Note that any string of characters enclosed in single quotes is treated as an identifier. (Escape conventions analogous to those above apply.) Similarly 123 is interpreted as ('1'[] ^+ '2'[]) ^+ '3'[] Note that unquoted strings may not be empty, and thus '' is not included. The difference in the concatenation operators is intended to suggest this. This whole scheme may appear unnecessarily complicated. It is necessary to insure that types are (small) finite collections of operations. It can also be argued that it is philosophically pleasing, since it models a formal definition of the meaning of such constants exactly. On a more practical note, it makes it possible to define an integer type with octal constants by simply changing the ^+ operation. Implementation note: Strings are not actually expanded in this way, provided the compiler can determine that all the operations possibly involved in strings of that type behave in an expected manner. Constants for a user-defined octal integer type would be handled rather inefficiently. See also: ChStr, Short