[Ur] Struggling to figure out mapping of record

Adam Chlipala adamc at csail.mit.edu
Sat Aug 18 08:59:42 EDT 2018


On 08/18/2018 08:43 AM, Simon Van Casteren wrote:
> {Age: option float, FirstName: string}
>
> [...]
>
> {Age: option float -> either string int, FirstName: string -> either 
> string string}
>
> [...] Output should be of the type:
>
> {Age: either string int, FirstName: either string string}
>
> I feel Ur should be able to do it but I can't figure it out. I keep 
> going back to Top.map2, but there the "to" and "from" types should be 
> type level functions from a certain K to a and b, but my records are 
> monomorphic and don't really have any relation between them except for 
> the record of mapping functions.

Actually, your records look like each field has a particular fundamental 
type pair, e.g. [option float] and [int] for [Age] and [string] and 
[string] for [FirstName].  So you can build a type-level record of pairs 
of types, that is, with kind [{(Type * Type)}], and use [map2] very 
naturally!



More information about the Ur mailing list