Declares a concrete type with fields and methods.
Aliases: class, struct
Syntax: genus <name> [<type-params>] <block>
Category
type
Related
Examples
examples/corpus/genus/genus.fab (canonical · keyword)
Declares a concrete type with fields and methods.
# Basic genus (record type) with fields
#
# genus <Name> {
# <type> <property>
# <type> <property> = <default>
# }
#
# GRAMMAR:
# genusDecl :← 'genus' ident '{' fieldDecl* '}'
# instance :← ident '{' fieldInit (',' fieldInit)* '}'
#
# EXPECTED OUTPUT:
# Field values for Punctum and Persona instances (defaults and overrides).
genus Punctum {
numerus x
numerus y
}
genus Persona {
textus nomen
# default when omitted at instantiation
numerus aetas = 0
bivalens activus = verum
}
incipit {
# Instantiate with all required fields
fixum _ p ← Punctum {
x = 10,
y = 20
}
nota p.x
nota p.y
# Instantiate with required + optional defaults
fixum _ marcus ← Persona {
nomen = "Marcus"
}
nota marcus.nomen
# 0 from default
nota marcus.aetas
# verum from default
nota marcus.activus
# Override defaults explicitly
fixum _ julia ← Persona {
nomen = "Julia",
aetas = 25,
activus = falsum
}
nota julia.nomen
nota julia.aetas
nota julia.activus
}Expected output:
10
20
Marcus
0
verum
Julia
25
falsum