Как создать тип, ограниченный в определенном диапазоне

Я хотел бы создать новый интегральный тип, который ограничен определенным диапазоном. Я пробовал:

data PitchClass = PC Int deriving (Ord, Eq, Show)

instance Bounded PitchClass where
  minBound = PC 0
  maxBound = PC 11

Тем не менее, то, что я хочу, это то, что потерпит неудачу, если что-то понравится

PC 12

или

PC (-1)

.

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

18
задан user268344 4 September 2011 в 23:22
поделиться