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