minimal subset with 2-tuples as only basic type subtypeframework for handling subtypes of multiple basic typestuples of arbitrary fixed lengthclosed records without optional fieldsrecursionfunctions of one argumentrepresent multiple function arguments using tuplesrecursive function typesstring singleton typereadonly typerest field for tuplesall of any basic typeopen records- readonly record fields
- optional record fields
boolean singleton typeinteger singleton typeinteger subtypes with specific width/signednessfloat singletonsdecimal singletons- objects (without member qualifiers or object qualifiers)
- typedesc subtypes
- future subtypes
- stream subtypes
table type without keys- table keys
- distinct object types
- public, private object member qualifiers
- client, service remote qualifiers
error detail subtypes- distinct error types
string:Char typexml subtypes- isolated qualifier
- transactional qualifier
fixed length array types (logically tuples, but implementation not scaleable)
- Syntax for difference and/or complement
["!" T]
or["-" T1 T2]
- Syntax for varargs functions
- Add
["?" T]
meaning["|", T, "()"]
- Conversion from SemType to JSON representation
- Syntax for module (collection of mutually recursive named definitions) as in Ballerina
- Use Ballerina's data-driven test feature to run tests in JSON syntax
- Maybe use
null
instead of"nil"
to represent nil type (for consistency withtrue
,false
)
- Consider better names than SemType
- One of the subtype tests creates >600 BDDs: we should understand why and try to reduce it
- Use isolated in core and json modules
- Extend to provide error messages for subtype failure
- I suspect we have a problem with a function return type of
never
- Move desugaring of multiple function arguments into core
- Better to make TypeCheckerContext be an object