E07902: a plain "..." String literal is required here - a backtick String is not a compile-time literal
What went wrong
A String EK9 reads at compile time is written as a backtick String. A constant, a constraint, a text's language (defines text for "de") and a service parameter's name (HEADER "X-Token") are all compile-time values, so each must be a plain "..." literal. A backtick String - interpolated or not - is not a compile-time literal. Before this error its raw source text became the value: a constant held `Welcome to ${APP_NAME}` with its backticks, and a header was looked up by a name that included them.
Worked examples
Compilable examples demonstrating this error and the correct fix:
- ek9 -q 1394 (Why must a constant's String be written with double quotes?)
How to fix it
Write the value with double quotes:
- GREETING <- `Welcome` --> GREETING <- "Welcome"
- defines text for `de` --> defines text for "de"
- token as String :=: HEADER `X` --> token as String :=: HEADER "X"
Text built by interpolation belongs where it is evaluated - a function, a method, or a local variable - not in a constant.
Common causes
- Using backticks for every String out of habit
- Trying to build a constant from other constants with ${...}
- A constraint written with an interpolated value to compare against
See also
- E07901: a double-quoted String is never interpolated
- E07900: invalid value - a text language that is not a locale
- https://ek9.io/builtInTypes.html#string_literals
Examples
Every example is compiled by the EK9 compiler: the first fails exactly as captioned, the others fix it.
Fails with E07902: a plain "..." String literal is required here - a backtick String is not a compile-time literal
#!ek9 defines module error.e07902.bad defines constant APP_NAME <- "Ledger" GREETING <- `Welcome to ${APP_NAME}` PLAIN_BACKTICK <- `no interpolation, still not a literal` defines type Code as String constrain as <> `x${APP_NAME}`
Fixed: Use a plain literal, and interpolate where it is evaluated
#!ek9 defines module error.e07902.good defines constant APP_NAME <- "Ledger" defines function //Interpolate where the text is evaluated greeting() <- rtn as String: `Welcome to ${APP_NAME}`
Questions and answers
These Q&A entries show E07902 and its fix: