为什么Template Haskell在编译期间允许任意IO操作?

时间:2012-12-09 08:15:02

标签: haskell compiler-construction io template-haskell

当我试图了解TH时,我发现在编译过程中它允许任意IO个动作(参见What's so bad about Template Haskell?)。这对我来说似乎很危险。这是为什么?某些任务真的有必要吗?或者它只是简化其设计,将所有不纯净的东西扔进IO罪孽箱中?

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

1 个答案:

答案 0 :(得分:12)

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

然后它尝试为此构建一个安全的API,或者只允许任意IO。选择后者是因为它是多么简单,以及如何容易地获得安全的API错误。