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

Pet*_*lák 7 compiler-construction io haskell template-haskell

当我试图了解TH时,我发现它允许IO在编译期间执行任意操作(请参阅模板Haskell有什么不好?).这对我来说似乎很危险.这是为什么?某些任务真的有必要吗?或者只是简化其设计,"将所有不纯净的东西扔进IO罪孽箱"?

更新:我也有兴趣,如果有在做出任何努力,安全 TH的子集,它不允许随意IO操作.

Car*_*arl 12

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

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