Safe Haskell 的文档说明:
作为将 AST 转换为另一个 AST 的宏系统,不应该可以将 TH 简单地限制为 Haskell 安全子集,并将结果 AST 限制为此子集吗?[...] 不幸的是,模板 Haskell 可以用于破坏模块边界,因此可以用来访问此构造函数。[...] 使用 -XSafe 标志编译 Danger 模块会限制可以使用的安全 Haskell 特性子集。这包括禁止使用 unsafePerfromIO、Template Haskell 等。
runIO
]是罪魁祸首。我猜可能会有没有它的TH? - user239558runIO
,你也可以使用 TH 访问本应无法访问的内容。(也就是说,你可以访问私有函数,这些函数未被导出并且不应该被访问。)那样会破坏 Safe Haskell 的初衷。如果要使用 TH,则必须找出如何防止未经授权的访问。 - MathematicalOrchid