主要观点:Template Haskell 可生成和操作 Haskell 代码,虽强大但有风险,易导致用户代码与template-haskell支持库紧密耦合,GHC 每次发布都会改变该库,破坏用户代码,作者与 Sebastian Graf 等 GHC 开发者一起努力避免此问题。
关键信息:
template-haskell核心是表示 Haskell 语法树的数据类型,常因 GHC 变化而改变,导致直接使用这些类型的代码易断。- 其使用方式可分为产生/构造(A、B)和消费/解构(C、D)两类,直接用构造器产生语法树易断,用引号较稳定但不流行。
- 计划通过解耦 GHC 与
template-haskell、改进template-haskell接口等方式避免紧密耦合,已合并两个 MR 改变两者关系,欢迎参与反馈和改进。
重要细节: template-haskell-2.18中ConP构造器变化导致esqueleto代码中断,需打补丁支持不同版本。- 可让用户用旧
template-haskell版本对应旧 GHC 源语言以避免断码,需为不同类型用户设计迁移策略。 - 计划改进
template-haskell接口,如添加(未类型化)模式引号、引入命名记录字段、转换reify方法返回类型等。 - 作者已合并两个 MR 改变 GHC 与
template-haskell的关系,方便后续改进,欢迎参与反馈和原型设计,可在 ZuriHac 2024 参与改进工作。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。