[xsl] XPath 3.0 How to implement the function composition operator?

Subject: [xsl] XPath 3.0 How to implement the function composition operator?
From: "Costello, Roger L." <costello@xxxxxxxxx>
Date: Mon, 15 Oct 2012 22:08:58 +0000
Hi Folks,

How is function composition implemented in XPath 3.0?

Example: Suppose I want to compose these two function:

    1. increment: this function increases its argument by 1.

    2. double: this function multiplies its argument by 2.

In Haskell I can compose the two functions like so:

    f = double . increment

And then I can apply the composed functions to an argument:

    f 2

The result is 6.

How is f implemented in XPath 3.0?

Here is my attempt, which is not correct:

            let $increment :=  function($x as xs:integer) {$x + 1},
                 $double        :=  function($y as xs:integer) {$y * 2},
                 $compose   :=  function(
                                                               $a as
function(item()*) as item()*,
                                                               $b as
function(item()*) as item()*
                                                            )
                                                           as item()*
                                               {$b($a)},
                $f  :=  $compose($double, $increment)
            return $f(2)

What is the correct way?

/Roger

Current Thread