Renderingla

finge

Constructs a tagged union variant.

Syntax: finge <variant> [{ <field> = <expr>, ... }] [∷ <type>]

Category

object

Related

Examples

examples/corpus/finge/finge.fab (canonical · keyword)

Constructs a tagged union variant.

# finge — variant construction expressions
#
# finge Varians { … } ∷ DiscretioNomen
#
# GRAMMAR:
#   variantExpr :← 'finge' variantName (fieldInitBlock)? '∷' typeName
#
# EXPECTED OUTPUT:
#   finge expressiones paratae

# --- Discretio types to construct ---

discretio Condicio {
    Agens,
    Iners,
    Pendens
}

discretio Nuntius {
    Pulsus { numerus x, numerus y },
    Clavis { textus clavis },
    Finis
}

discretio Responsum {
    Bonum { textus nuntius },
    Malum { textus causa }
}

incipit {
    # --- Unit variants with explicit type ---

    fixum Condicio s1 ← finge Agens ∷ Condicio
    fixum Condicio s2 ← finge Pendens ∷ Condicio

    # --- Payload variants with explicit type ---

    fixum Nuntius e1 ← finge Pulsus { x = 100, y = 200 } ∷ Nuntius
    fixum Nuntius e2 ← finge Clavis { clavis = "intro" } ∷ Nuntius
    fixum Nuntius e3 ← finge Finis ∷ Nuntius

    # --- Responsum variants ---

    fixum Responsum r1 ← finge Bonum { nuntius = "opus perfectum" } ∷ Responsum
    fixum Responsum r2 ← finge Malum { causa = "opus fractum" } ∷ Responsum

    nota "finge expressiones paratae"
}

Expected output:

finge expressiones paratae