<div><div dir="auto">One can capture subset constraints using a type class, as the following module does:</div></div><div dir="auto"><br></div><div dir="auto"><div><a href="https://github.com/vizziv/UrLib/blob/master/UrLib/subset.urs">https://github.com/vizziv/UrLib/blob/master/UrLib/subset.urs</a></div><div><a href="https://github.com/vizziv/UrLib/blob/master/UrLib/subset.ur">https://github.com/vizziv/UrLib/blob/master/UrLib/subset.ur</a></div><br></div><div dir="auto">(It relies on another module, Eq, from the same project.)</div><div dir="auto"><br></div><div dir="auto">Ziv</div><div dir="auto"><br></div><div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Tue, Oct 29, 2019 at 11:21 Mark Clements <<a href="mailto:mark.clements@ki.se">mark.clements@ki.se</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Adam: thank you for your prompt reply.<br>
<br>
To define defaultSettings properly, is there some way to constraint the<br>
type union (keep ++ change) to an existing type (e.g. {A:int, B:int})?<br>
The following also do not work:<br>
<br>
fun defaultSetting<br>
     [keep] [change] [keep ~ change]<br>
     (args : $change)<br>
     : $(keep ++ change) =<br>
     update {A=1, B=1} args<br>
<br>
(* or *)<br>
<br>
fun defaultSetting<br>
         [keep] [change] [keep ~ change]<br>
         (args : $change)<br>
     : $(keep ++ change) =<br>
     {A=1,B=1} --- change ++ args<br>
<br>
-- Mark<br>
<br>
On 29/10/19 12:52 am, Adam Chlipala wrote:<br>
> On 10/28/19 3:27 PM, Mark Clements wrote:<br>
>> fun defaultSetting args =<br>
>>       update {A=1, B=1} args<br>
>><br>
>> val _ = defaultSetting {A=2} (* {A=2, B=1} *)<br>
>> val _ = defaultSetting {B=2} (* {A=1, B=2} *)<br>
> The problem is that polymorphism in Ur/Web is always declared<br>
> explicitly, not inferred as OCaml or Haskell.  You must add binders<br>
> for type variables for defaultSettings just as you did for update.<br>
> (This statement applies to definitions of functions, not uses, so the<br>
> two example calls above should work once you get defaultSettings<br>
> defined properly.)<br>
<br>
<br>
<br>
När du skickar e-post till Karolinska Institutet (KI) innebär detta att KI kommer att behandla dina personuppgifter. Här finns information om hur KI behandlar personuppgifter<<a href="https://ki.se/medarbetare/integritetsskyddspolicy" rel="noreferrer" target="_blank">https://ki.se/medarbetare/integritetsskyddspolicy</a>>.<br>
<br>
<br>
Sending email to Karolinska Institutet (KI) will result in KI processing your personal data. You can read more about KI’s processing of personal data here<<a href="https://ki.se/en/staff/data-protection-policy" rel="noreferrer" target="_blank">https://ki.se/en/staff/data-protection-policy</a>>.<br>
_______________________________________________<br>
Ur mailing list<br>
<a href="mailto:Ur@impredicative.com" target="_blank">Ur@impredicative.com</a><br>
<a href="http://www.impredicative.com/cgi-bin/mailman/listinfo/ur" rel="noreferrer" target="_blank">http://www.impredicative.com/cgi-bin/mailman/listinfo/ur</a><br>
</blockquote></div></div>