Renderingla

String and template literals

Faber uses delimiter semantics — each quote form means a different source shape. They are not interchangeable synonyms.

Literal forms

FormTypeRole
'…'asciiFixed machine tokens; no §; no (…)
"…"textusShort Unicode line strings; (…) renders
«…»textusBlock/multiline Unicode; (…) renders
formaCaptured templates; (…) captures
{ … }jsonCompile-time JSON document
``octetiCompile-time hex bytes
[ … ]lista<T>Faber list literal

String-template application

Faber formats text with string-template application: a "…" or «…» literal with § holes, then parenthesised arguments:

functio greet(textus nomen) → textus {
    redde "Salve, §!"(nomen)
}

fixum numerus pagina ← 3
fixum numerus totum ← 10
fixum textus code ← "200"
fixum textus label ← "OK"

fixum _ msg ← "Page § of §"(pagina, totum)
fixum _ block ← «status: § (§)»(code, label)

Key rules:

  • § (U+00A7) is the template hole
  • Positional holes: §0, §1, … for explicit ordering
  • Trailing ! selects display formatting: "Salve, §!"(nomen)
  • The (args) suffix is template application, not a function call

Block strings

Multiline blocks use guillemets «…»:

fixum _ sql ← «
    select id, email
    from accounts
»

Captured templates (forma)

Backtick templates capture text and parameters without rendering. Safe for bound SQL/URL payloads:

fixum numerus user_id ← 42
fixum _ query ← `select * from users where id = §`(user_id)

Inline JSON

A bare { … } is inline JSON: a compile-time json document, not an anonymous Faber object. Keys are quoted strings separated by ::

fixum _ empty ← {}
fixum _ user ← { "name": "Marcus", "age": 30, "active": true }
fixum _ nested ← { "meta": { "version": 1 }, "tags": ["alpha", "beta"] }

For typed genus construction, use the type name and = field shape:

genus Point {
    numerus x
    numerus y
}
fixum _ p ← Point { x = 10, y = 20 }