[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