Есть ли типизированный язык программирования, где я могу ограничить типы, например, следующие два примера?
-
A Вероятность - это число с плавающей запятой, минимальное значение 0.0 и максимальное значение 1.0.
type Probability subtype of float where max_value = 0.0 min_value = 1.0
-
Распределение дискретной вероятности - это карта, где: ключи должны быть одного типа, значения - это все вероятности и сумма значений = 1.0.
type DPD<K> subtype of map<K, Probability> where sum(values) = 1.0
Насколько я понимаю, это невозможно с Haskell или Agda.