“…Besides primitive and singleton types we have the dyn supertype for variables whose type cannot be properly inferred statically; function types, t → t; table types, { [ st ] : t ... } wkness, which include a tag (wkness) indicating the weakness of the table, and are restricted to be indexed by singleton types; recursive types, µy. t, to better support common programming idioms using tables; and product types, t × t and () (the empty tuple), which we use to express the domains of functions, though they have many other roles in typing Lua programs (see, for example, [17] express the domains of functions, though they have many other roles in typing Lua programs (see, for example, [17]).…”