Haskell unsafeCoerce newtype в идентичный newtype

Представьте, что есть объявление нового типа:

newtype T = T Int

Это объявление находится в модуле, но не экспортируется. Я хотел бы передать значение типа T функции. Теперь я могу объявить свою собственную версию T, используя точно такое же определение. Компилятор, конечно, пожалуется, если я передам (my.T 0) функции, ожидающей (hidden.T 0) . Я буду использовать unsafeCoerce для принуждения первого ко второму. Здесь упоминается , что использование безопасно «между новым типом и типом, который он оборачивает». Я просто хочу проверить, безопасно ли это и в описанном мной случае.

Я знаю, что это осуждается и противоречит всем принципам хорошей практики программного обеспечения, теории типов, философии функционального программирования, политикам ghc, здравому смыслу и т. Д. Тем не менее, я хочу знать, будет ли это «нормально» работать.

5
задан aelguindy 27 January 2012 в 16:28
поделиться