As a python user I understand the need for better invariant checking, but should it be encoded in types, contracts or conventions?
* Types so I can prevent all the low hanging fruit.
* Contracts so I can encode invariants that the types
can't always express.
* Conventions so that everyone is talking the same
language and there is less confusion