2012-01-26 37 views
14

在許多黑線鱈生成模塊文檔的(例如Prelude),在右上角一個小盒子中可以看出,含有便攜性,穩定性和維護信息:Haddock模塊字段如何使用可移植性,穩定性和維護者?

An example package information box

通過觀察源代碼到這樣的模塊和實驗,我確認是從像在模塊描述以下行生成的此信息:

-- Maintainer : [email protected] 
-- Stability : stable 
-- Portability : portable 

有幾種關於這個奇怪的事情:

  • 字段似乎在此爲了工作 - 任何領域投入的順序簡單地當作模塊說明本身的一部分了。儘管源文件中的訂單是與生成文檔中訂單的相反!

  • 我一直無法找到這些字段的任何官方文檔。有一個名爲stabilityCabal package property,其示例值與我在等價的Haddock字段中看到的值相匹配,但除此之外,我什麼也沒找到。

因此:這些字段是如何使用的,並且它們在任何地方都有記錄?

我特別想知道:

  • 常用值的PortabilityStability的完整列表。 This HaskellWiki page有一個列表,但我想知道這個列表來自哪裏。

  • 決定模塊是便攜式還是非便攜式的標準。特別是,我希望這些問題的答案acme-strfry是一個FFI綁定到strfry,這個函數僅在glibc中可用。包是不可移植的,因爲它只適用於glibc系統或可移植的,因爲它不使用任何Haskell語言擴展?通常的用法似乎意味着後者。

  • 爲什麼在源文件中需要特定的字段順序,以及爲什麼它與生成的文檔中的排序相反。

回答

4

哦,我以爲那些字段是來自cabal包的描述。他們似乎根本沒有記錄在Haddock的文檔中。我發現這一點,這並沒有真正回答你的問題,但:

http://trac.haskell.org/haddock/ticket/71

所以,如果它的自由,無論如何,爲什麼不寫「非便攜式(取決於的glibc)」?我甚至看到「便攜式(取決於ghc)」,這很奇怪。我還想知道在Foo被添加到Haskell 2010之後,由於非Haskell98擴展Foo而不可移植的模塊會發生什麼。

請注意,您鏈接到的Cabal文檔也說穩定性是自由形式。當然,即使haddock或cabal是定義什麼是可接受的值,它仍然是由維護人員主觀選擇一個。

關於具體的順序,你應該問問haddock郵件列表,或者檢查源代碼並提交一個錯誤。 PS:strfry是對Haskell社區的無價貢獻,但它應該是純粹和便攜的,你不覺得嗎?

+0

確實,我目前使用的是「非便攜式(僅限glibc)」,但希望獲得一些關於這是否被認爲是正確使用場。 – ehird

+0

雖然這些字段是自由格式的,但Cabal文檔,HaskellWiki頁面以及我所看到的所有值似乎都來自一小組值(包括我不希望有人獨立思考的值,例如「臨時」)使我認爲實際使用的價值來自一個小集合,即使這個集合不是在任何地方「正式」寫下的;至少知道該套裝的起源會很高興。對於訂購的東西,我可能會很快查看源代碼或詢問郵件列表。 – ehird

+0

P.S.考慮到對全球RNG狀態的依賴性,製作'strfry'將會非常困難:) – ehird

2

啊,是的,哈多克更晦澀和骯髒的特點之一。

盡我所知,它只是一個無證黑客。沒有理由爲什麼領域的順序應該重要,但它確實如此。格式化的具體選擇(即作爲模塊註釋中的特殊形式而不是某種單獨的塊)並不是最好的選擇。我的猜測是有人希望有一天能夠快速添加此功能,因此他們剽竊了一些最小但功能正常的功能,並將其留在那裏。 (不費心記錄它。)

就個人而言,我根本就不打擾這些領域。這些信息可以從Cabal獲得,所以我也不會在Haddock中複製它。也許有一天Cabal會自動將這些信息傳遞給Haddock ...