2010-08-29 106 views
8

黑線鱈的文檔,如果我在.cabal文件的文件部分(介紹)行{}在.cabal在哈斯克爾

> { -# OPTIONS_GHC -fglasgow-exts -XTemplateHaskell #- } 

我會得到錯誤信息

haddock: parsing haddock prologue failed 

運行

$ cabal haddock 

的時候,但如果我擺脫{}一切工作正常。有什麼方法可以逃脫{},以便它們可以在描述中使用?

+2

看起來你實際上不能在域中{}。我閱讀了解析器,並且似乎沒有任何用於轉義表示Cabal文件中的非縮進敏感區域的{}的預覽。 (順便說一句,是不是「OPTIONS_GHC」棄用?可能更好地說'{ - #LANGUAGE TemplateHaskell# - }'。) 我尋找的人試圖對Hackage這樣做的例子,我發現的是大概)你的嘗試。也許將剪切粘貼代碼移動到不同的文件中......或者對解析器進行非向後兼容的更改: – jrockway 2010-08-29 20:47:28

+0

哦,是的,我使用'test-framework-th',我找出了什麼樣的編譯指示我在描述中沒有詳細說明,所以也許文檔是不必要的。:) – jrockway 2010-08-29 20:48:33

+0

@jrockway:謝謝。我只會使用'(...)'而不是'{...}'。 – finnsson 2010-08-31 12:38:24

回答

2

OPTIONS_GHC本身並未被棄用(例如,您可以利用它來啓用特定的構建選項),但使用它來打開/關閉語言功能並不被認爲是一種好的做法。改用{-# LANGUAGE ... #-}編譯指示。

例如{-# LANGUAGE TemplateHaskell, ForeignFunctionInterface, RankNTypes #-}

此外,利用包含所有功能的-fglasgow-exts被認爲是不正確的形式。最好只包含你需要的擴展,這樣對於任何新加入你的代碼的人來說都是很清楚的。

+1

這是很好的建議,但它甚至沒有試圖回答這個問題。 – 2012-12-17 12:23:59

3

Haddock有兩種代碼塊語法 - 使用@分隔塊的語法允許您使用HTML轉義,它可以用來嵌入Cabal解析器無法處理的字符。

不幸的是,似乎Cabal從@限制塊中刪除了主要空格,所以您還必須在空格前加上任何帶有HTML編碼空間的行 

這裏的上午例如:

description: 
    My package with a code example! 
    . 
    @ 
    {-\# LANGUAGE TemplateHaskell \#-} 
    . 
    main = do 
      $templatePrint "hello!" 
      $templatePrint "world!" 
    @ 

這使得到:

我包了代碼示例!

{-# LANGUAGE TemplateHaskell #-} 

main = do 
    $templatePrint "hello!" 
    $templatePrint "hello!"