К чему обращается TypeState относительно дизайна языка? Я видел, что это упомянуло в некоторых обсуждениях относительно нового языка Mozilla под названием Ржавчина.
По сути, это расширение типов, где вы не просто проверяете, разрешена ли какая-либо операция в целом, но в этом конкретном контексте. Все это во время компиляции.
Для Java написана программа проверки состояния типов, а пояснительная страница Адама Варски дает некоторую полезную информацию. Я только сам разбираюсь в этом материале, но если вы знакомы с QuickCheck для Haskell, применение QuickCheck к монадическому состоянию кажется аналогичным: классифицируйте состояния и объясните, как они меняются, когда они видоизменяются через интерфейс.