[Ur] Correct way to use "computed table names" `{{c}}` & "computed field names" `{c}` in functions?
Adam Chlipala
adamc at csail.mit.edu
Fri Aug 21 08:35:52 EDT 2015
On 08/20/2015 07:54 PM, Stefan Scott wrote:
> I'm attempting create a simple demo using this syntax.
>
> The demo should define a function (eg `table_to_xml aTable aField`)
> which accepts a table name and a field name.
>
> Then this function is called using different table names and field
> names, to run some SQL queries and generate some XML.
>
> I haven't found any concrete examples of this sort of thing in the
> manual or online, so the following is just a wild guess:
>
> (* INCORRECT/tableToXml.ur *)
>
> table t1 : { F1 : string }
> table t2 : { F2 : string }
>
> fun table_to_xml
> aTable (** OK? **)
> aField (** OK? **)
The basic problem here is that both of these should be constructor-level
parameters, enclosed in square brackets, not value-level parameters, as
they are defined above.
The less basic problem is that you will need to provide more involved
annotations, including a disjointness constraint and a value-level
parameter for the table, to get it all to type check. I do believe that
Chapter 2 of the official Ur/Web tutorial goes into sufficient detail on
those concepts.
> =
> queryX1
> ( SELECT {aField} (** OK? **)
Every field projection in a query needs an explicit 'table.' part.
> FROM {{aTable}} ) (** OK? **)
I believe this needs an explicit 'AS' clause.
> {[r.{aField}]} (** Q (1) **)
Looks fine here.
> t1x <- table_to_xml t1 #F1 (** Q (2) **)
> ;
> t2x <- table_to_xml t2 #F2 (** Q (2) **)
> ;
You'll need to enclose the actual parameters in square brackets, too.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.impredicative.com/pipermail/ur/attachments/20150821/5c085068/attachment-0001.html>
More information about the Ur
mailing list