Hello,
I was wondering if it is possible to improve template programming and operator overloading with XQUERY 3.?
1) template programming : XQUERY provides a quite natural template mechanism using type switch and instance:
declare function yell($animal) {
if ($animal instance of element()) then
return typeswitch($animal)
case element(cow) return "Moo"
default return "..."
else "this is not an animal"
};
However, I wonder whether it could be possible to provide such a mechanism directly at the interpreter level ? For instance, the following code seems coherent and concise :
declare function yell($animal as element(cow) ) {"Moo"}
declare function yell($animal as element() ) {".."}
declare function yell($animal ) {"This is not an animal"}
As far as I understand, XQUERY functions identification seems to be achieve through a couple (name, arity). Would it be difficult to extend it with (name,signature or predicate) ?
2) Operator overloading (quite linked to the previous question)
I don't know how to overload operators with XQUERY. For instance I would like to define something like
declare function array:operator+($left,$right){array:
for
-each-pair($left,$right,function
(
$a
+
$b
) {
$a
+
$b
}
)}
Is it possible ?
I know that I can survive writing
declare function array:plus($left,$right){array:
for
-each-pair($left,$right,function
(
$a
+
$b
) {
$a
+
$b
}
)}
but when one start to write algorithmic code, it is far easier and understandable to write $a+$b than array:plus($a,$b)