- From: Dimitre Novatchev <dnovatchev@gmail.com>
- Date: Thu, 29 Sep 2022 18:25:00 -0700
- To: "C. M. Sperberg-McQueen" <cmsmcq@blackmesatech.com>
- Cc: Michael Kay <mike@saxonica.com>, public-xslt-40@w3.org
- Message-ID: <CAK4KnZf3rHuCeRTkUoP6z=Y4EU2gjRzjoQ8BSJZ+4ndb_kHxxQ@mail.gmail.com>
On Thu, Sep 29, 2022 at 5:52 PM C. M. Sperberg-McQueen < cmsmcq@blackmesatech.com> wrote: > > (b) It is a declaration of two (related) functions, one of which is > my:f#1 and the other of which is my:f#2. The xsl:function element in > question is in effect shorthand for > > <!-- my:f#1 (just calls my:f#2 with the default value for p2) --> > <xsl:function name="my:f" as="..."> > <xsl:param name="p1" as="node()"/> > <xsl:sequence select="my:f($p1, 42)"/> > </ > > <!-- my:f#2 --> > <xsl:function name="my:f" as="..."> > <xsl:param name="p1" as="node()"/> > <xsl:param name="p2" as="xs:integer"/> > ... > </ > > I'll call the collection of functions thus declared a 'function > family'. > More simply, this is true: my:f#1 is identical to my:f#2(?, 42) So yes, these are indeed two different (but related) functions: my:f2 and one of its many possible partial applications. +1 for the whole message! Thanks, Dimitre > > I think your notes are assuming (a), which is perfectly reasonable. But > I wonder if (b) might be worth thinking about. It would have the > advantage that it would require not change (that I can see, at the > moment) to the type system as it relates to functions. At least, that > looks like an advantage to me. > > If we look ahead to parameters with a cardinality of 'multiple', then > (b) would mean that a single xsl:function element might declare an > unbounded number of functions. That would mean that implementors will > need a way to avoid materializing all the instantations of such a > function family and to materialize the ones they need when they need > them. But there too, the rules remain relatively straightforward, since > every instantiation of the function familiy has the same fixed arity > currently expected by our type system. > > > I think the simplest rule is that it's an error to have declarations D > > and E, where the import precendence of D is higher than that of E, if > > D's arity range includes part but not the whole of the arity range of > > E. > > If it's a single function, that's probably simplest, yes. > > It does mean that while under today's style of handling such groups of > related functions I could override my:f#1 without overriding my:f#2, I > would not have that ability under the new dispensation. (This does not > matter to me in practice: since I normally want anything I write to be > runnable under Saxon HE, I don't actually use packages even where it > would make sense to use them. That also means I lack useful experience > in this part of the spec.) > > If we take approach (b), then I don't think we would need any change to > the rules. (That's not the same as claiming implementors won't need to > change anything in the way they check the rules.) > > I see that the day has now reached its end without my getting back to > this; I'll go ahead and send it, fragmentary though it is, for what it > is worth. > > Michael > > > -- > C. M. Sperberg-McQueen > Black Mesa Technologies LLC > http://blackmesatech.com > >
Received on Friday, 30 September 2022 01:25:26 UTC