Вдогонку-2. На самом деле практически в любом функциональном языке вы можете легко и просто реализовать парадигму MISU (marking illegal states unrepresentable)! Потому что по большому счёту ФП именно MISU и подразумевает автоматически.
Вам остаётся лишь make representable states valid. Для этого вам прежде всего понадобятся sum types: если вы с их помощью определите набор допустимых состояний, то все эти состояния должны быть корректными и иметь определённую семантику. Другими словами, если ваш тип описывает все возможные состояния, то каждое из этих состояний должно иметь осмысленное значение в контексте вашей программы. Нельзя оставлять "дырки" в определении типа (когда некоторые состояния не имеют смысла).
Далее вам надо задействовать exhaustive pattern matching, чтобы не забывать обрабатывать все возможные состояния в функциях, использующих соответствующий тип. Если вы упустите какое-либо валидное состояние, компилятор выдаст ошибку.
И поскольку типы строго определены, а все возможные состояния перечислены, невозможно будет создать или вернуть "нелегальные" состояния: сам компилятор не позволит вам сделать это.
Post #1504
951

- 👍 60
- ⚡ 6
- ❤ 5
- 🤔 4
- 💯 3