Я хотел бы создать новый интегральный тип, который ограничен определенным диапазоном. Я пробовал:
data PitchClass = PC Int deriving (Ord, Eq, Show)
instance Bounded PitchClass where
minBound = PC 0
maxBound = PC 11
Тем не менее, то, что я хочу, это то, что потерпит неудачу, если что-то понравится
PC 12
или
PC (-1)
.
- общий подход к ситуации, в котором вы хотите разместить ограничения на создание новых типов, в которых конструкторы стоимости не экспортируются из модуля, а скорее функции, которые возвращают экземпляры типа и которые выполняют проверки ограничения, экспортируются ?