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