我在寫一個Haskell編譯器,我想盡可能多地實現Haskell 2010。我的編譯器可以解析一個模塊,但是爲程序完成模塊似乎是一項不重要的任務。我提出了棘手的,但也許有效,哈斯克爾模塊的一些例子:解決邊緣案例Haskell模塊導入和導出
module F(G.x) where
import F as G
x = 2
這裏模塊F
出口G.x
,但G.x
是一樣的F.x
,所以模塊F
出口x
,當且僅當它出口x
。
module A(a) where
import B(a)
a = 2
module B(a) where
import A(a)
在這個例子中,要解決模塊A
的出口,編譯器檢查a
從B
進口是一樣的聲明a = 2
,但B
出口a
,當且僅當A
出口a
。
module A(f) where
import B(f)
module B(f) where
import A(f)
在解析模塊A
,編譯器may've假設f
從B
進口存在,這意味着A
出口f
,從而B
可以導入A(f)
和出口f
。唯一的問題是沒有在任何地方定義的f
:)。
module A(module X) where
import A as X
import B as X
import C as X
a = 2
module B(module C, C.b) where
import C
b = 3
module C(module C)
import B as C
c = 4
這裏,module
出口造成,出口列表是依賴於彼此和自己。
所有這些例子應該是有效的Haskell,由Haskell 2010規範定義。
我想問問是否有任何想法如何正確和完全實現Haskell模塊?
假定一個模塊只包含(簡單)變量綁定,import
S(可能與as
或qualified
),並可能有資格變量的出口列表和module ...
縮寫。該算法必須能夠:
- 計算每個模塊
- 鏈接每個導出的變量與其結合
- 鏈路每模塊中使用與其結合每(也許合格)可變的出口變量的有限列表
哇,謝謝,我甚至不希望有實際的文件和圖書館針對這個問題:) –