我相信以下代码与 Set.mapMonotonic coerce
一样安全,也就是说,如果 a
或者 b
有不同的 Ord
实例,最坏的情况就是我会破坏 Set
的不变性:
coerceSet :: Coercible a b=> Set.Set a -> Set.Set b
coerceSet = unsafeCoerce
那是正确的吗?
编辑:有关 Set
的相关特性问题,请参考:https://github.com/haskell/containers/issues/308
unsafeCoerce
做什么非常模糊。它有几个经验法则,但不清楚(至少对我来说)这些规则是否适用于此!希望我们能得到一个GHC内部专家写一些真正详细的内容,说明什么是可行的和什么是不可行的。 - Daniel WagnerunsafeDupablePerformIO
的安全规则非常简单,但我怀疑任何人都无法自信地为几乎任何使用unsafeInlinePerformIO
的情况提供可靠的规则。 - dfeuer