Haddock模块如何使用Portability,Stability和Maintainer?

时间:2012-01-26 00:50:42

标签: haskell haddock

在许多Haddock生成的模块文档中(例如Prelude),可以看到右上角的一个小方框,其中包含可移植性,稳定性和维护者信息:

An example package information box

从查看源代码到这些模块和实验,我确认此信息是从模块描述中的以下行生成的:

-- Maintainer  :  libraries@haskell.org
-- Stability   :  stable
-- Portability :  portable

有几个奇怪的事情:

  • 字段似乎按此顺序工作 - 任何按顺序排列的字段都只是作为模块描述本身的一部分。尽管源文件中的订单是生成的文档中订单的相反,但

  • 我无法找到这些字段的任何官方文档。有一个名为stability的{​​{3}},其示例值与我在等效的Haddock字段中看到的值相匹配,但除此之外,我一无所获。

所以:这些字段是如何使用的,是否在任何地方都有记录?

特别是,我想知道:

  • PortabilityStability的常用值的完整列表。 Cabal package property有一个列表,但我想知道这个列表的来源。

  • 决定模块是便携式还是非便携式的标准。特别是,我希望这些问题的答案,This HaskellWiki page,是一个FFI绑定到strfry,这个函数只在glibc中可用。包是不可移植的,因为它只适用于glibc系统或可移植,因为它不使用任何Haskell语言扩展?通常的用法似乎意味着后者。

  • 为什么源文件中需要特定的字段顺序,以及为什么它与生成的文档中的排序相反。

2 个答案:

答案 0 :(得分:4)

哦,我以为这些字段来自cabal包描述。在Haddock的文档中似乎没有记录它们。我发现了这个,它并没有真正回答你的问题,但是:

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

所以如果它是自由形式的话,为什么不写“非便携式(取决于glibc)”?我甚至看到过“便携式(取决于ghc)”,这很奇怪。我还想知道,在将Foo添加到Haskell 2010之后,由于非Haskell98扩展Foo而导致的非便携模块会发生什么。

请注意,您链接到的Cabal文档也表示稳定性是自由形式的。当然,即使haddock或cabal要定义什么是可接受的值,仍然需要维护者主观地选择一个。

关于特定订单,您可能只需要在haddock邮件列表中查询,或查看源代码并提交错误。

PS:strfry是对Haskell社区的宝贵贡献,但它应该是纯粹的便携式的,你不觉得吗?

答案 1 :(得分:3)

是的,哈多克的一个比较模糊和苛刻的特征。

尽我所知,这只是一个无证件的黑客攻击。没有明智的理由为什么字段的顺序应该重要,但确实如此。格式化的具体选择(即,作为模块注释中的特殊形式而不是某种单独的块)也不是最好的。我的猜测是有人希望有一天能够快速添加这个功能,所以他们会破解一些最小但功能正常的东西,并将其留在那里。 (没有费心去记录它。)

就个人而言,我根本不打扰这些领域。这些信息可以从Cabal获得,所以我也不打算在Haddock中复制它。也许有一天Cabal会自动将这些信息传递给Haddock ......