invariants

Рассмотрим следующее data Predicate = Pred Name Arity Arguments type Name = String type Arity = Int type Arguments = [Entity] type Entity = String Это позволило бы создать Pred "divides" 2 ["1", "2"] Pred "between" 3 ["2", "1", "3"] Но и "незаконный" Pred "divides" 2 ["1"] Pred "between...

Я ищу советы о том, где добавить правила проверки для доменных сущностей, а также рекомендации по реализации. Я искал и не нашел того, что искал, или я упустил это. Я хотел бы знать, каков рекомендуемый способ проверки того, что свойства не являются нулевыми, в определенном диапазоне или длине и т. д... Я ...

Я хочу создать исключение времени выполнения в случае, если мои инварианты класса будут признаны недействительными. Поскольку это ошибка программирования (аналогично NullPointerException), клиенты не должны перехватывать это исключение. Должен ли класс исключений быть объявлен частным или публичным (или чем-...

я погуглил тему, но кроме Википедия Я не нашел больше никакой полезной документации или статей. может ли кто-нибудь объяснить мне простыми словами, что это значит, или направить меня на какую-то приятную и легкую для понимания документацию?...