当我试图了解TH时,我发现在编译过程中它允许任意IO
个动作(参见What's so bad about Template Haskell?)。这对我来说似乎很危险。这是为什么?某些任务真的有必要吗?或者它只是简化其设计,将所有不纯净的东西扔进IO
罪孽箱中?
更新:如果我们努力制作一个不允许任意IO
操作的safe TH子集,我也会感兴趣。
答案 0 :(得分:12)
Template Haskell的主要用途之一是从外部资源构建常量,例如来自文件的大文本值或构建信息(版本,时间,环境)。显然,这样做需要系统访问。
然后它尝试为此构建一个安全的API,或者只允许任意IO。选择后者是因为它是多么简单,以及如何容易地获得安全的API错误。