I'm amazed this has not come up before.
Previously, parameterless modules were treated as a single atomic block for the purposes of type-checking, but not quite correctly. This alters the way they are type checked so that parameterless modules are treated simply as namespaces. This simplifies their usage. The change is relatively simple: parameterless modules are declared as binding only their module name, and depend on all declarations in the module. Each of the declarations in the module is then included in the standard list of declarations to type check. This should fix several bugs with generalisation of types inside modules.
It was accepting type annotations where the explicitly given type was incompatible with the type inferred for the patterns. In particular, the explicitly given type was a datatype, whereas the inferred type was of the form x.y.
Wildcards were being used too liberally in the derived patterns, meaning that datatype clauses were not always correctly matched when they were heavily nested inside a single pattern.
This is required in order to specify events that are less than tick, tau, but are otherwise not in the order.
This is like prioritise but takes an arbitrary PO instead.