在许多 Haddock 生成的模块文档(例如Prelude
)中,可以看到右上角的一个小框,其中包含可移植性、稳定性和维护者信息:
从查看源代码到此类模块和实验,我确认此信息是从模块描述中的以下行生成的:
-- Maintainer : libraries@haskell.org
-- Stability : stable
-- Portability : portable
这有几个奇怪的地方:
这些字段似乎只按此顺序工作——任何乱序的字段都被简单地视为模块描述本身的一部分。尽管源文件中的顺序与生成的文档中的顺序相反!
我一直无法找到这些领域的任何官方文档。有一个名为的Cabal 包属性
stability
,其示例值与我在等效的 Haddock 字段中看到的值相匹配,但除此之外,我什么也没找到。
那么:这些字段打算如何使用,它们是否记录在任何地方?
特别是,我想知道:
Portability
和的常用值的完整列表Stability
。这个 HaskellWiki 页面有一个列表,但我想知道这个列表的来源。决定模块是可移植还是不可移植的标准。特别是,我想要回答这些问题的包acme-strfry是一个 FFI 绑定,它是一个
strfry
仅在 glibc 中可用的函数。包是不可移植的,因为它只适用于 glibc 系统,还是可移植的,因为它不使用任何 Haskell 语言扩展?常见的用法似乎暗示后者。为什么源文件中需要特定的字段顺序,以及为什么它与生成的文档中的顺序相反。