7

当我试图了解 TH 时,我发现它允许IO在编译期间进行任意操作(请参阅Template Haskell 有什么不好?)。这对我来说似乎很危险。这是为什么?某些任务真的有必要吗?还是只是对其设计的简化,“把不纯的东西都扔进IO罪仓”?

更新:如果有任何努力制作一个不允许任意操作的 TH安全子集,我也会感兴趣。IO

4

1 回答 1

12

模板 Haskell 的主要预期用途之一是从外部资源构建常量,例如来自文件的大文本值或构建信息(版本、时间、环境)。显然,这样做需要系统访问权限。

然后归结为尝试为此构建一个安全的 API,或者只允许任意 IO。选择后者是因为它很简单,而且很容易让安全的 API 出错。

于 2012-12-09T08:36:50.433 回答