从 GHC 的手册中,第 Safe Language 章节得知:
答:未提及。
问:如何使用模块边界控制 —— 使用 safe 语言编译的 Haskell 代码仅能访问通过其他模块的导出列表公开的符号。其中一个重要部分是 safe 编译后的代码不能使用它无法导入的数据构造函数来检查或创建数据值。如果某个模块 M 通过谨慎使用其导出列表建立了一些不变量,则使用导入 M 的 safe 语言编译的代码将保证尊重这些不变量。因此,在 safe 语言中禁用 Template Haskell 和
GeneralizedNewtypeDeriving
,因为它们可以用来违反该属性。
GeneralizedNewtypeDeriving
来破坏模块的不变量?答:未提及。
unsafeCoerce
(http://joyoftypes.blogspot.com/2012/08/generalizednewtypederiving-is.html)。 - luqui