alias Result = Algebraic!(NoteOn, NoteOff, PolyAftertouch, ControlChange, ProgramChange, ChanAftertouch, PitchBend, None);
case 128: .. case 143: result = NoteOn (); break;
case 144: .. case 159: result = NoteOff (); break;
case 160: .. case 175: result = PolyAftertouch (); break;
case 176: .. case 191: result = ControlChange (); break;
case 192: .. case 207: result = ProgramChange (); break;
case 208: .. case 223: result = ChanAftertouch (); break;
case 224: .. case 239: result = PitchBend (); break;
default: return Result(None());
assert(foo(130) == NoteOn());
assert(foo(225) == PitchBend());