> On Mar 9, 2021, at 1:17 PM, fo...@univ-mlv.fr wrote: >> . . . >> Now this example is not exactly analogous to your original, because we have >> not >> provided explicit variables for this purpose. I believe that in an earlier >> version of the design one would write >> >> case Rectangle(Point(int x1, int y1), Point(int x2, int y2)) >> >> But perhaps in the current proposal one must write >> >> case Rectangle(Point(int x1, int y1) & var p1, Point(int x2, int y2) & >> var p2) >> >> or perhaps >> >> case Rectangle(var p1 & Point(int x1, int y1), var p2 & Point(int x2, >> int y2)) >> >> In all of these cases, my argument is still the same: the simplest model is >> that >> that deconstructor for Rectangle just supplies two values that are points, >> and >> then the first point value is matched against the first sub pattern, and only >> then is the second point value matched against the second subpattern. As a >> result p2 and x2 and y2 do not yet have bindings or values while the first >> sub-pattern is being matched. > > I think we agree here, i was just saying that for a deconstructor call you > get all the bindings at the same time, > so in the case there is two bindings, having two expressions that each one > guard one binding is equivalent to have one guard that uses the two bindings. > > Obviously, when patterns are nested, you don't have access to all the > bindings of all the patterns at once. > > Now, i don't think you have to use an & between patterns to provide a name, > in my opinion, we should things in the other way > case Rectangle(Point(int x1, int y1), Point(int x2, int y2)) > should be a simplified way to write > case Rectangle(Point(int x1, int y1) _, Point(int x2, int y2) _) > i.e. when destructuring, we don't provide a name for that binding (hence my > use of '_') > > With that in mind, if you want to name the intermediary point, you can just > write > case Rectangle(Point(int x1, int y1) p1, Point(int x2, int y2) p2)
Yes, then I think we do agree here. We may have had a misunderstanding over language: I usually understand “binding” to mean the association of a value with a variable. I think that for a deconstructor you get all the _values_ at the same time, after which _bindings_ of variables to those values (or matching of sub patterns to those values) are established (or performed) sequentially. But this is a very delicate distinction that I am drawing. —Guy