Como faz | (pipe) no trabalho de correspondência de padrões?

Você pode escrever

str match { case "foo" | "bar" => ... }

À primeira vista, parece que| poderia ser um objeto extrator, no entanto:

str match { case |("foo", "bar") => ... }

não funciona. (E não vejo como isso poderia ser implementado de qualquer maneira.)

Então é um operador interno mágico?

(Acredito que já tenha visto essa pergunta no SO antes, mas é impossível procurar por ...)

questionAnswers(2)

yourAnswerToTheQuestion