@nick @rntz
Maybe another way to think about it is that incompatibility gives you a way to state a sensible semantics for first-wins.
Consider strings with prefix order: a < ab < abc, and abc |/| abd.
And consider the program:
match x { "ab" -> ... | "abc" -> ... }
To achieve first match semantics, one implementation would be:
- compare incoming x to "ab":
- if x >= "ab", fire that arm
- elseif x || "ab", wait
- else, it must be that x |/| "ab", so you can move on from this arm.
Indeed in this example, the second arm will never fire in match-first semantics. So perhaps the other ordering is more interesting. Either way, this semantics means that you have a monotone output stream because only one match arm will ever fire.