[xquery-talk] xquery 3.1 wishlist

Christophe Geiser christophe.geiser at e-smile.org
Mon Jul 6 03:15:06 PDT 2015


On Mon, Jul 6, 2015 at 10:09 AM, Michael Kay <mike at saxonica.com> wrote:

Adding capability to XQuery 3.1 at this stage will require a more
> convincing justification than “I felt the need for this in some edge cases”.

On Mon, Jul 6, 2015 at 10:40 AM, Christian Grün
[christian.gruen at gmail.com](mailto:christian.gruen at gmail.com)
<http://mailto:[christian.gruen@gmail.com](mailto:christian.gruen at gmail.com)>
wrote:

The function call might disappear in the evaluated code, and the
> resulting expression "123 + 456" might include no reference to the
> original function anymore.
>
Thanks Michael and Christian,

Understood and agreed. I was not aware that 3.1 was so close from final and
did not mean to be insistent. So far, I am not aware of other Functional
languages proposing this type of feature, so consider this request as
closed ; )

Best,
Christophe

P.S.
Just to elaborate on one example “edge case”, this the type of pattern I
use for some restxq resource functions (Adam’s Retter eXist
implementation). It has the advantages of attaching higher level success
and error messages as metaData to resource functions. Having a
function-item() function returning the current function being executed
would avoid re-typing the function item local:myResourceFunction#arity when
the signature of the function changes - not much more convincing as a
justification !

declare
  %rest: ... restxq annotation for the function
  %msg:success('successKey', 'successMessage'),
  %msg:error('errorKey', 'errorMessage'),

  function local:myResourceFunction($args) {
      let $fn:= function() {
        let $initialCheck := loginAttemptAndOtherChecks($args) (:
throw an exception if not succesfull:)
        let $doTheWork:= local:doTheWork($args)
      }
      return local:processResoureFunction($fn, local:myResourceFunction#arity)
 };

declare function local:processResourceFunction($fn, $callee ) {
    try {
      $fn(),
      local:retrieveSuccessMessage($callee)

   } catch * {
      local:retrieveErrorMessage($callee, $err:code, $err:description,
$err:value)
  }
};

declare function local:doTheWork() {
   (: do the work here, throw exceptions on errors:)
};

​
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://x-query.com/pipermail/talk/attachments/20150706/e204ae1f/attachment.html>


More information about the talk mailing list