2013-05-28 34 views
3

我试图通过产生阴谋和黑线鳕API文档。我希望它是乳胶。所以,我做的:哈斯克尔阴谋:生成乳胶黑线鳕鱼文档

haddock: internal error: declaration not supported by declNames 

有什么我可以做什么或什么不对的鳕鱼:

cabal haddock --haddock-option=--latex 

这与最终失败了呢?

仅供参考,我必须使用阴谋,因为构建过程是相当复杂(大量的预处理器,FFI库,...)。手动调用haddock真的很痛苦。如预期

大厦HTML文档但是完全工作。

完整的输出为http://pastebin.com/xt6rWqde

我使用:

cabal-install version 0.14.0 
using version 1.14.0 of the Cabal library 

The Glorious Glasgow Haskell Compilation System, version 7.4.2 

Haddock version 2.11.0, (c) Simon Marlow 2006 
Ported to use the GHC API by David Waern 2006-2008 

回答

3

我认为这是在鳕鱼缺点/错误。挖一点点的人士透露,该错误消息来自declNamesHaddock/LaTeX.hs

declNames :: LHsDecl DocName -> [DocName] 
declNames (L _ decl) = case decl of 
    TyClD d -> [unLoc $ tcdLName d] 
    SigD (TypeSig lnames _) -> map unLoc lnames 
    _ -> error "declaration not supported by declNames" 

所以LaTeX的后端只支持类类型声明和类型签名,传递给declNames一切产生"declaration not supported by declNames"错误。

在XHTML后端,进一步声明支持:

ForD d       -> ppFor summ links loc (mbDoc, fnArgsDoc) d unicode qual 
InstD _      -> noHtml 

外来的声明产生的输出,实例声明没有。不支持的声明引起

error "declaration not supported by ppDecl" 

ppDeclHaddock.Backends.Xhtml.Decl)。

实例声明不会传递给在LaTeX后端的declNames,所以它们不会生成错误,但是外部声明(如果已导出)。

由于您的模块是Foreign.Java.X,我希望某些外部输入或输出从某个模块导出,这就解释了错误。

一个错误报告/功能请求似乎呼吁。

+1

黑线鳕票247:http://trac.haskell.org/haddock/ticket/247。我可以从haddock中排除这些模块(包含外部声明)吗? – scravy

+1

啊,找到了。使用'--hide = ...'可以从haddock中排除模块 - 它现在可以使用包含外部声明的排除模块。 – scravy