[Ur] Default settings using a generic record update

Mark Clements mark.clements at ki.se
Tue Oct 29 11:19:14 EDT 2019


Adam: thank you for your prompt reply.

To define defaultSettings properly, is there some way to constraint the
type union (keep ++ change) to an existing type (e.g. {A:int, B:int})?
The following also do not work:

fun defaultSetting
     [keep] [change] [keep ~ change]
     (args : $change)
     : $(keep ++ change) =
     update {A=1, B=1} args

(* or *)

fun defaultSetting
         [keep] [change] [keep ~ change]
         (args : $change)
     : $(keep ++ change) =
     {A=1,B=1} --- change ++ args

-- Mark

On 29/10/19 12:52 am, Adam Chlipala wrote:
> On 10/28/19 3:27 PM, Mark Clements wrote:
>> fun defaultSetting args =
>>       update {A=1, B=1} args
>>
>> val _ = defaultSetting {A=2} (* {A=2, B=1} *)
>> val _ = defaultSetting {B=2} (* {A=1, B=2} *)
> The problem is that polymorphism in Ur/Web is always declared
> explicitly, not inferred as OCaml or Haskell.  You must add binders
> for type variables for defaultSettings just as you did for update.
> (This statement applies to definitions of functions, not uses, so the
> two example calls above should work once you get defaultSettings
> defined properly.)



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<https://ki.se/medarbetare/integritetsskyddspolicy>.


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<https://ki.se/en/staff/data-protection-policy>.


More information about the Ur mailing list