The two ways of concatenating strings in Lil are fuse, which takes a simple string to intercalate between the elements of a list:
" : " fuse "Alpha","Beta" # -> "Alpha : Beta"
And format, which offers a richer printf-like string formatting language:
"%s : %s" format "Alpha","Beta" # -> "Alpha : Beta"
The format primitive is useful in many situations, including gluing a fixed prefix and/or suffix onto strings:
"Prefix %s Suffix" format "MyString" # -> "Prefix MyString Suffix"
In situations where a function, operator, or interface attribute expects a string, you can often get away with simply providing a list of strings (perhaps joined together into a list with the comma (,) operator) which will be implicitly fused together. Per The Lil Reference Manual for type coercions:
When a string is required, numbers are formatted, and lists are recursively converted to strings and joined. Otherwise, the empty string is used.
This is why you're able to elide the fuse in your example; "field.text" always treats a written value as a string