是否可以在 Haskell 中使用自己的语法糖(如 do 表示法或箭头表示法)?
嗯,这个问题是不言自明的。假设我想实现一些特殊的语法只是为了好玩。是否可以?我应该使用什么工具?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
嗯,这个问题是不言自明的。假设我想实现一些特殊的语法只是为了好玩。是否可以?我应该使用什么工具?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(2)
Haskell 标准中没有这样的元语法,但 GHC 中有。您可以使用 GHC“准引用”工具(与 GHC 的“Template Haskell”工具不同)制作几乎任何您想要的符号。
GHC 用户指南这很短,主要指向 haskell wiki Quasiquotation 页面 和实现者的 主页,这两个都指向原始出版物:“为什么很高兴被引用:Haskell 的准引用”。
人们已经使用准引用来嵌入 XML 语法、正则表达式、特殊字符串和文本形式,并且在“JMacro 是一个用于以编程方式生成 Javascript 代码的库”中。
There is no such meta-syntax in the Haskell standard, but there is in GHC. You can make almost any notation you want using the GHC "quasi-quotation" facilities (which are different from GHC's "Template Haskell" facility).
The GHC user guide on this is quite short, and mainly points to haskell wiki page on Quasiquotation and the implementor's home page, both of these point to the original publication: "Why It’s Nice to be Quoted: Quasiquoting for Haskell".
People have used quasi-quotation for embedding XML syntax, regular expressions, special string and text forms, and in "JMacro is a library for the programmatic generation of Javascript code."
我想,最好的方法是编写一个自定义预处理器。一些句法扩展是从这种方法开始的。例如,请参阅:
。另一种方法是给GHC打补丁,但这种方法比较困难。
I guess, the best way would be to write a custom preprocessor. Several syntactic extensions started out from this approach. For instance, see:
and many more. The other way is to patch GHC, but this approach is rather difficult.