Gergely Buday wrote:
I'm wondering about the role of the Unit kind. Is that there to have the

kind x Unit = kind

equality, so to have a neutral element in the structure of kinds?

No, that equality does not hold in Ur. There are no kind equalities beyond simple syntactic equality.

The purpose of [Unit] at the kind level is the same as the purpose of [unit] at the type level: sometimes you just don't want to include any information! For instance:

And, while it is clear that {Type} is a type-level record, it is not
clear what purpose does

{Unit} and {{Unit}}

have.

[{Unit}] is the kind of sets of field names. That is, a record (e.g., finite map) whose co-domain is a singleton set is isomorphic to a finite set. The [Unit] kind is a simpler feature to add than a separate treatment of finite sets, and yet it makes finite sets derivable from records.

"Finite set of names" is a very useful abstraction to have. For instance, to write a function polymorphic in all record types that map all fields to [string], one writes something like:
    val f : names ::: {Unit} -> $(mapU string names) -> ...


_______________________________________________
Ur mailing list
[email protected]
http://www.impredicative.com/cgi-bin/mailman/listinfo/ur

Reply via email to