Me gustaría crear un nuevo tipo integral que esté limitado a un cierto rango. He tratado:Cómo crear un tipo delimitado dentro de un cierto rango
data PitchClass = PC Int deriving (Ord, Eq, Show)
instance Bounded PitchClass where
minBound = PC 0
maxBound = PC 11
Sin embargo, lo que quiero es algo que va a fallar si algo así como
PC 12
o
PC (-1)
se intenta.
Es el enfoque general para una situación en la que desea establecer restricciones para crear nuevos tipos uno en el que los constructores de valores no se exportan desde el módulo, sino funciones que devuelven instancias del tipo y que realizan comprobaciones de restricciones. ¿exportado?