Cómo lo hace | (tubería) en el trabajo de coincidencia de patrones?

Puedes escribir

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

primera vista, parece que| podría ser un objeto extractor, sin embargo:

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

No funciona. (Y no puedo ver cómo se podría implementar de todos modos).

¿Entonces es un operador mágico incorporado?

(Creo que he visto esta pregunta en SO antes, pero es imposible buscar ...)