Starts an exhaustive pattern match over a value or values.
Aliases: match
Syntax: discerne <subject> <block>
Category
control-flow
Related
Examples
examples/corpus/discerne/discerne.fab (canonical · keyword)
Starts an exhaustive pattern match over a value or values.
# discerne — pattern matching on discretio values
#
# discerne <value> {
# casu <Casus> { <body> }
# casu <Casus> ut <alias> { <body> }
# casu <Casus> fixum <bindings> { <body> }
# casu <Casus> fixum <field> ut <alias> { <body> }
# }
#
# GRAMMAR:
# discerneStmt :← 'discerne' expr '{' casuClause* '}'
#
# EXPECTED OUTPUT:
# discerne exempla parata
# discretio — tagged union / enum declaration
discretio Condicio {
Agens,
Iners,
Pendens
}
discretio Nuntius {
Pulsus { numerus x, numerus y },
Clavis { textus clavis },
Finis
}
# Simple casu matching on unit variants (no payload)
functio nomina(Condicio s) → textus {
discerne s {
casu Agens { redde "agens" }
casu Iners { redde "iners" }
casu Pendens { redde "pendens" }
}
}
# casu with fixum bindings destructures variant fields
functio tracta(Nuntius e) → nihil {
discerne e {
casu Pulsus fixum x, y {
nota "pulsus: § §"(x, y)
}
casu Clavis fixum clavis {
nota "clavis: §"(clavis)
}
casu Finis {
nota "finis"
}
}
}
incipit {
# nomina/tracta are defined for downstream exempla; smoke check only
nota "discerne exempla parata"
}Expected output:
discerne exempla parata