Hi everybody, following the discussion about && / and between guards and patterns, i don't think i've a clear understanding on what is a pattern and what is a guard.
When we first discuss of guards, the separation was a kind of clean, a pattern match something and a guard provides further refinements. By example, with a made a syntax, case Point(var x, var y) && x > 0 && y > 0 Point(var x, var y) is the pattern and x > 0 and y > 0 are the guards. So a pattern asks if something match and a guard uses the binding to add restrictions. As Brian said, in C#, you can directly test inside a pattern, using a weird syntax chosen by C# like >0, so the same example can be rewritten case Point(>0, >0) and with the bindings, i suppose something like case Point(var x >0, var y >0) Here the line between a pattern and a guard starts to become blurry, because >0 is pattern. So if there a difference between a pattern and a guard ? regards, Rémi