一些库用于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相同的运行时表示?