[Ur] disjointness proof in type-level functions

Sergey Mironov grrwlf at gmail.com
Wed Aug 7 10:46:47 EDT 2013


Hi. I faced a problem while exploring the type system. Looks like I
can't define a constructor-level function which adds a field (of int
type) to the record. I've tried to do the following:

> con addIntField = fn (n :: Name) (t::{Type}) => [n = int] ++ t

Ur complains about missing disjointness proof. I understand what it
is, but what I don't know it how to add this proof. Is it ever
possible on this level? All examples I've seen so far have such proof
on value-level, like 'project' function from [1]. I need this to teach
my app to define tables for custom records, adding primary key named
Id, like

con c_users = [ Name = string, Pass = string]

..

table users : $(addIntField #Id c_users) PRIMARY KEY Id

Regards,
Sergey

[1] - http://www.impredicative.com/ur/tutorial/tlc.html



More information about the Ur mailing list