
On Sat, May 28, 2016 at 02:13:33PM +1200, Greg Ewing wrote: [...]
Finally we could allow "case class" to be abbreviated to just "class":
switch obj: class Intersection( class Line(class Point(?x1, ?y1), class Point(?x2, ?y2)), class Line(class Point(?x3, ?y3), class Point(?x4, ?y4))):
Is that unacceptably verbose? I don't know.
Verbose, not so much. Cryptic? Hell yes! Who is going to be able to guess what it means? We're no longer even in the same galaxy as executable pseudo-code. Try this as an exercise: given the above, explain in plain English what it does and what the result will be. What exactly is being matched? Those familiar with C-like switches are going to be totally confused. They'll probably wonder if you are matching "if obj == the class Intersection", and have no idea what's going on with the nested Line and Point stuff. Those familiar with classes and the class keyword are going to wonder what class definitions are doing inside the class declaration. Does this mean we can now do this? class Child(class Parent: pass): def method(self): ... Obviously not, but that's what it looks like. I wonder whether the real problem here is that pattern matching as a concept is simply too concise for mere mortals? Once you get past the trivial Haskell-esque: def factorial(n): switch n: 0: return 1 n: return n*fact(n-1) its just doing too much in too little code to be easily comprehensible. -- Steve