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

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

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

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

Однако я хочу чего-то, что потерпит неудачу, если будет предпринята попытка что-то вроде

PC 12

или

PC (-1)

.

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

-121--782026-

_ shutdown AttribureError (игнорируется) при построении кода, который использует M2Crypto Я запускаю lint следующим образом: $ python -m pylint.lint m2test.py с кодом import M2Crypto def f (): M2Crypto.RSA.new_pub_key («») .as _ pem (cipher = None) .split («\n ») Вывод lint заканчивается на:...

Я запускаю lint следующим образом:

$ python -m pylint.lint m2test.py

с этим кодом:

import M2Crypto
def f():
    M2Crypto.RSA.new_pub_key("").as_pem(cipher=None).split("\n")

Вывод lint заканчивается на:

Exception AttributeError: '_shutdown' in  ignored

Этот код работает нормально при выполнении (выше на самом деле минимальный тестовый случай; но полная версия работает). Исключение игнорируется, но Bitten считает это ошибкой, поэтому останавливается на этом шаге.

Я пытался добавить «M2Crypto.threading.init () »/« M2Crypto.threading.cleanup ()» вокруг определения функции, но это не решило проблему.

Как предотвратить возникновение этой проблемы?

Я использую M2Crypto 0.21.1, pylint 0.24 и Python 2.7 (также пробовали 2.7.2) на Debian Lenny x86_64.

9
задан Tony Meyer 13 September 2011 в 09:21
поделиться