是否可以在 Haskell 中使用自己的语法糖(如 do 表示法或箭头表示法)?

发布于 2024-10-26 17:24:43 字数 55 浏览 7 评论 0 原文

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

Well, the question is self-explicative. Suppose I want to implement some special syntax just for fun. Is it possible? What tools should I use?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

生活了然无味 2024-11-02 17:24:43

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."

诗酒趁年少 2024-11-02 17:24:43

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

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

。另一种方法是给GHC打补丁,但这种方法比较困难。

I guess, the best way would be to write a custom preprocessor. Several syntactic extensions started out from this approach. For instance, see:

  • DrIFt: Automatized generation of type class instances
  • arrowp: Preprocessor for arrow notation
  • c2hs: Automated generation of marshalling informations and type-signatures for FFI-bindings

and many more. The other way is to patch GHC, but this approach is rather difficult.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文