Commit Graph

48 Commits (e392d411fadca54d3b79337757893df7627a4c66)

Author SHA1 Message Date
Mike Gerwitz e392d411fa Short-hand partial application example added to README.md 2014-12-02 16:43:05 -05:00
Mike Gerwitz bb9107c8c1 `apply-gen' now generates functions for partial applications
This is intended as a convenient shorthand:

```xml
  <!-- these two are identical -->
  <sequence select="f:apply( my:func(), $x, $y )" />
  <sequence select="my:func( $x, $y )" />
```
2014-12-02 16:05:01 -05:00
Mike Gerwitz faadaa3edd More comprehensive fnref abstraction
This will allow the implementation to evolve transparently.  And it will be
evolving.
2014-12-01 09:53:45 -05:00
Mike Gerwitz 189eb0cdd6 Partial applications now defined in terms of ref mutators 2014-12-01 09:48:45 -05:00
Mike Gerwitz c526fa2925 `f:{unshift,push}-args' added 2014-12-01 00:34:52 -05:00
Mike Gerwitz 18c1614777 `f:set-args' setter and `f:args' accessor implemented
As operations on dynamic function references become more complex, and since
evolution of the reference structure is planned to evolve, maintaining an
abstraction is vital for both grokking and maintenance.
2014-11-30 04:36:08 -05:00
Mike Gerwitz cd278c31d4 Partial applications now manipulate fnref arity
Previously, a separate `@partial' attribute was added to the ref and the
`@arity' maintained.  Unfortunately, this coupled `f:arity' with
`f:partial', which is unnecessary, considering that partial application is
supposed to conceptually yield a new function, which should be transparent
to `f:arity'.
2014-11-30 03:29:46 -05:00
Mike Gerwitz bc871435fa apply-gen now uses `f:make-ref'
We're essentailly macro-expanding the `f:make-ref' call.  :)
2014-11-30 03:28:43 -05:00
Mike Gerwitz 5857eed3d6 `arity.xsl' stylesheet combined with ref functions into `ref.xsl'
These are strongly related---they operate on the same abstraction.
2014-11-29 02:01:40 -05:00
Mike Gerwitz c64cefe931 `f:arity' now considers partial applications 2014-11-29 01:16:59 -05:00
Mike Gerwitz f62e6a8e33 Arity test case using f:make-ref
In place of manual specification.
2014-11-28 02:27:07 -05:00
Mike Gerwitz 7fd1618390 Partial dynamic function applications
This introduces support for partial applications on dynamic functions.
The test cases are comprehensive and the implementation should be
quite stable.

Even though the base higher-order function implementation was based on
the work of Dimitre Novatchev[0], I have chosen a different route for
partial application:  Novatchev's method relies on storing partially
applied arguments as nodes, together with their types.  The types are
detected the best they can be, with accuracy varying wildly depending
on whether a schema-aware processor is present.

But regardless, that method would not retain node context.

Sequences, however, do.  By using sequences, we allow the processor to
retain all type and context information perfectly without any
additional work that is inaccurate, adds complexity, and likely to
cause subtle problems.  It will also support any types that we are
unaware of.  As Novatchev mentions:

  The argument type-detection that f:curry() uses has been implemented
  only for the builtin XML Schema datatypes. It will not recognize the
  user-defined type of an argument, which can be created by an user of
  a Schema-Aware (SA) XSLT 2.0 processor.[0]

This is not a problem with hoxsl.

[0]: http://conferences.idealliance.org/extreme/html/2006/Novatchev01/EML2006Novatchev01.html
2014-11-27 01:12:17 -05:00
Mike Gerwitz 162c037508 apply-gen TODOs added to header 2014-11-27 01:11:31 -05:00
Mike Gerwitz d9f4894546 README.md updated with mention of partial applications
It does not do it much justice; documentation will come later.  The test
cases are comprehensive.
2014-11-27 01:11:31 -05:00
Mike Gerwitz a351e94910 All `f:apply' functions support partial application
'Tis tasty!
2014-11-27 01:11:30 -05:00
Mike Gerwitz 63487afa67 `f:apply' currying support
Partial application support on all the other `f:apply' functions (other
arities) will be completed in the next commit.
2014-11-27 01:11:30 -05:00
Mike Gerwitz 425f050b03 `f:apply' test case now using f:make-ref
That is, in place of manual construction.  This is especially important for
the next commit, which requires an arity datum.
2014-11-27 01:11:29 -05:00
Mike Gerwitz 33788871a9 f:make-ref, f:is-ref, and f:QName added 2014-11-27 01:11:29 -05:00
Mike Gerwitz b384e5fad1 Partial applications apply target function when all params are bound
I am aware of the Saxon 9 warning regarding multiple imports of arity.xsl;
I'm going to choose to ignore this, formally in the future.  Each of the
stylesheets is treated like a module.

Michael Kay, Saxon's author, discusses it here:

  http://stackoverflow.com/a/10102298
2014-11-27 01:11:28 -05:00
Mike Gerwitz 465ef7e8a5 Apply test case ensures arguments are passed by reference
Confidence in its application is also increased through a unique node.
2014-11-27 01:11:28 -05:00
Mike Gerwitz 0dc019c9ed Error and hook for arity count in partial application 2014-11-27 01:11:27 -05:00
Mike Gerwitz 04373b5edd f:arity extracted into its own stylesheet
It depends on partial application logic, but does not belong in partial.xsl
2014-11-27 01:11:27 -05:00
Mike Gerwitz a02865d8b1 May now partially apply partial applications 2014-11-27 01:11:26 -05:00
Mike Gerwitz 8ba1f04147 Partial application initial development
No support yet for recursive partial applications; just a basic concept.
2014-11-27 01:11:14 -05:00
Mike Gerwitz 0f2212e7d4 test/runner properly fails on xspec non-zero exit 2014-11-24 11:13:45 -05:00
Mike Gerwitz 8a204534f0 *.{out=>apply} for test case apply-gen output 2014-11-24 11:08:24 -05:00
Mike Gerwitz 1c01e765a7 Delayed function nodes now wrapped in f:ref node
This primarily allows us to type check, but will also may it easy/performant
to query more complicated structures.
2014-11-24 11:07:25 -05:00
Mike Gerwitz eb66c838c6 f:arity added for delayed functions 2014-11-22 00:17:01 -05:00
Mike Gerwitz acdacef1d7 apply-gen application template priority for good measure
Depending on import/include order is a bad idea.
2014-11-22 00:05:11 -05:00
Mike Gerwitz 01217711c4 {xslink=>hoxsl} namespace corrections
Copy-paste exposed.
2014-11-22 00:05:11 -05:00
Mike Gerwitz 1cc2423662 apply-gen now properly handles multiple functions 2014-11-22 00:05:11 -05:00
Mike Gerwitz dd6c8a8040 Docblocks for fgen:create-{func,tpl} 2014-11-22 00:05:11 -05:00
Mike Gerwitz d33b369ef4 README.md licensed under the FDL 1.3 2014-11-22 00:05:11 -05:00
Mike Gerwitz f7eaa821bc Basic README.md added 2014-11-22 00:05:11 -05:00
Mike Gerwitz e96bc07b39 test/runner will now fail on non-fatal test errors 2014-11-22 00:05:11 -05:00
Mike Gerwitz f50c2299fa f:apply implemented
Although the general concept was independently discovered, the finer details
of this implementation are motivated by the excellent, comprehensive work of
Dimitre Novatchev[0].

For those of us who either can't, or don't wish to, abaondon XSLT.

[0]: http://conferences.idealliance.org/extreme/html/2006/Novatchev01/EML2006Novatchev01.html
2014-11-22 00:05:08 -05:00
Mike Gerwitz 061d4b7e09 test/runner now accepts list of tests, defaulting to all 2014-11-21 09:12:45 -05:00
Mike Gerwitz db95ae12ff test/runner now outputs file name before running 2014-11-21 00:20:25 -05:00
Mike Gerwitz 91c10bca41 test/runner index location correction 2014-11-21 00:20:24 -05:00
Mike Gerwitz de627c9822 test/runner will now exit with non-zero status on any failure 2014-11-21 00:14:24 -05:00
Mike Gerwitz ab4c9208aa test/index.html now ignored by Git 2014-11-20 23:46:01 -05:00
Mike Gerwitz 81bec6714b apply-gen application template generation added 2014-11-20 23:45:59 -05:00
Mike Gerwitz 28845f8b2e apply-gen ensures output of namespaces used by processed functions 2014-11-20 23:39:53 -05:00
Mike Gerwitz 4130b6cf4b apply-gen now ignores nullary functions 2014-11-20 23:39:23 -05:00
Mike Gerwitz 935ce312b4 apply-gen output generation warning comment added 2014-11-20 23:38:06 -05:00
Mike Gerwitz 04700086b1 apply-gen generated stylesheet contains version number (2.0) 2014-11-20 23:10:02 -05:00
Mike Gerwitz c73f3a4e7c apply-gen initial development 2014-11-20 22:22:28 -05:00
Mike Gerwitz d3aaa7faa0 Project scaffolding modeled after xslink 2014-11-20 11:59:54 -05:00