小编Hog*_*ama的帖子

为什么这种不安全的Coerce不安全?

一些库用于unsafeCoerce临时满足约束:

class Given a where given :: a

newtype Gift a r = Gift (Given a => r)

give :: forall a r. a -> (Given a => r) -> r
give a k = unsafeCoerce (Gift k :: Gift a r) a
Run Code Online (Sandbox Code Playgroud)

(这个例子来自反射包. 单圈包也使用这个技巧.)

为什么这样unsafeCoerce安全?是否有这保证任何正式文件Given a => r,并a -> r在GHC相同的运行时表示?

haskell ghc

15
推荐指数
1
解决办法
167
查看次数

标签 统计

ghc ×1

haskell ×1