How is this case class match pattern working?
case-class, pattern-matching, scala
Solution
When doing pattern matching, the Scala compiler will interpret `o1 c1 o2` the same as `c1(o1, o2)`. That's why `::` works inside pattern matches too.
Problem
I've just seen this case class in the Scala `actors` package: ``` case class ! [a](ch: Channel[a], msg: a) ``` And in the JavaDoc it describes usage in the following form: ``` receive { case Chan1 ! msg1 => ... case Chan2 ! msg2 => ... } ``` Why is this not: ``` receive { case !(Chan1, msg1) => ... case !(Chan2, msg2) => ... } ``` Is the bang operator ! a special case in a similar way to methods ending in a colon :