In the spec "6.7.34 Literal" (page 124):
"An UncastLiteral is always interpreted as a Value of property type STRING."
This means the expression TRUE is interpreted as a String.
If you want a boolean expression, you need to write:
CAST(TRUE AS BOOLEAN). That's strange.
The same for other expressions such as numbers.