有没有什么方法可以通过unsafeCoerce
来克服重大问题?请考虑以下情形:
data BlackBox = forall a. BlackBox a
mkBlackBox :: a -> (BlackBox, Proxy a)
mkBlackBox x = (BlackBox x, Proxy)
getBlackBox :: Proxy a -> BlackBox -> a
getBlackBox Proxy (BlackBox x) = unsafeCoerce x
如果您运行此代码,则会发现如果unsafeCoerce :: a1 -> b
和BlackBox :: a -> BlackBox
,则a1
不会与a
统一。是否有任何希望将它们结合在一起,并假设它有效?