19

好吧,这个问题是不言自明的。假设我想实现一些特殊的语法只是为了好玩。是否可以?我应该使用什么工具?

4

2 回答 2

17

Haskell 标准中没有这样的元语法,但在 GHC 中有。您可以使用 GHC “准引用”工具(不同于 GHC 的“Template Haskell”工具)进行几乎任何您想要的符号。

这方面的GHC 用户指南很短,主要指向有关 Quasiquotation的 haskell wiki 页面和实施者的主页,这两个都指向原始出版物:“Why It's Nice to be Quoted: Quasiquoting for Haskell”

人们已经使用准引用来嵌入 XML 语法、正则表达式、特殊字符串和文本形式,并且在“JMacro 是一个用于以编程方式生成 Javascript 代码的库”中。

于 2011-03-27T16:02:37.020 回答
8

我想,最好的方法是编写一个自定义预处理器。几个句法扩展都是从这种方法开始的。例如,参见:

  • DrIFt : 自动生成类型类实例
  • arrowp:箭头符号的预处理器
  • c2hs:为 FFI 绑定自动生成编组信息和类型签名

还有很多。另一种方法是修补GHC,但这种方法比较困难。

于 2011-03-27T15:03:28.390 回答