簡體   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