Adding more information,
we want the carrier to be a primitive type (to be able to optimize it
away), which means that we can not use null to represent "do_not_match",
we have to have a flag inside the carrier for that.
The alternate approach is to use a .ref class for partial patterns
(using null for "no match") and a B3 class for total patterns (since it
needs no failure channel.)
I think its pretty important that the static name of the carrier class
not appear in generated bytecode. As a result, we will have to use a
reference type (object or interface), which means we get the null
channel "for free".