繁体   English   中英

如何实现Haskell扩展?

[英]How to implement a Haskell extension?

我对Haskell的扩展有几种想法,可以通过将扩展语言翻译成普通语言来实现(这些扩展将提供一些语用和关键词)。 有什么更好的方法来实现它们? 它应该建立在GHC之上。

一种想法是为“功能类”添加关键字,这些类将由功能自动定义。 例如,使用此假设扩展,可以如下定义标准Num类:

class (funclass(+) a,funclass(-) a, ...) => Num a

如我所见,您可以通过三种方式执行此操作:

  1. 实现一个预处理器,该预处理器读取扩展的Haskell源代码,将其转换为普通的Haskell,然后将其保存回磁盘。 然后,您可以照常编译翻译后的Haskell代码。

  2. 使用Template Haskell实现一些代码,这些代码将为您完成翻译。 (特别是,某种准引用可能是适当的。)

  3. 修改GHC本身。 (这显然需要重新编译GHC,然后检查您是否意外破坏了任何现有功能。)我建议这样做可能是一件繁重的工作。

我正要提到,你可以写一个GHC插件-然而,这样的插件没有允许你定义新的语法。 (尽管它们确实允许您定义新的编译器编译指示,然后将其转换为常规的Haskell。)如果您可以使用这种方法,则意味着可以避免重新编译GHC。 您只需要编写一个小的独立式插件即可。 但是Template Haskell可能会更轻松地完成这项工作。

至于您建议的扩展名是否是个好主意...我认为不是,但是您当然可以尝试使用它。

我对Haskell扩展有几种想法,可以通过将扩展语言翻译成普通语言来实现。

SugarHaskell是为此目的而构建的。 它是SugarJ项目中可扩展语言的一部分。 另请参阅有关HackageHaskell研讨会论文软件包

约SugarHaskell潜在的长处 :它配备了一个可扩展的语法,它支持的布局约束模块化规范,这样你就可以轻松定义语法行为就像做记号。 它带有一个知道语法扩展的Eclipse插件,因此您可以扩展语法突出显示。 Eclipse插件的其他功能也可以扩展(代码完成,错误报告,大纲视图等)。

关于SugarHaskell的潜在弱点 :它以Java(胶水代码和Eclipse插件),SDF(语法)和Stratego(desugarings)实现。 hackage软件包主要包含一堆Java代码。 这不一定是一个弱点,但是也许您更愿意使用Haskell而不是Stratego来指定退货。 除Eclipse外,没有与其他编辑器集成。 Eclipse插件可以很好地扩展,但是对Haskell的基本支持很薄弱,因此它目前在大型Haskell项目中并不真正可用。

考虑到潜在的弱点,SugarHaskell目前不适合用于生产环境,但是对于语言扩展的实验和原型设计可能很有用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM