19 lines
453 B
Plaintext
19 lines
453 B
Plaintext
def makeType(label, superstamps) {
|
|
def stamp {
|
|
to audit(audition) {
|
|
for s in superstamps { audition.ask(s) }
|
|
return true
|
|
}
|
|
}
|
|
def guard {
|
|
to coerce(specimen, ejector) {
|
|
if (__auditedBy(stamp, specimen)) {
|
|
return specimen
|
|
} else {
|
|
throw.eject(ejector, `$specimen is not a $label`)
|
|
}
|
|
}
|
|
}
|
|
return [guard, stamp]
|
|
}
|