Во многих документах по модулям, созданным Haddock (например, Prelude
]) в правом верхнем углу можно увидеть небольшой прямоугольник, содержащий информацию о переносимости, стабильности и сопровождении:
Изучив исходный код таких модулей и экспериментов, я подтвердил, что эта информация генерируется из таких строк в описании модуля:
-- Maintainer : libraries@haskell.org
-- Stability : stable
-- Portability : portable
В этом есть несколько странностей:
Поля только , кажется, работают в таком порядке - любое f поля, выведенные из строя, просто рассматриваются как часть самого описания модуля. И это несмотря на то, что порядок в исходном файле противоположен порядку в сгенерированной документации!
Мне не удалось найти официальную документацию по этим полям.Существует свойство пакета Cabal с именем стабильность
, примерные значения которого соответствуют значениям, которые я видел в эквивалентных полях Haddock, но кроме этого, я ничего не нашел.
Итак: Как эти поля предназначены для использования и задокументированы ли они где-нибудь?
В частности, я хотел бы знать:
Полный список часто используемых значений для Переносимость
и Стабильность
. На этой странице HaskellWiki есть список, но я хотел бы знать, откуда этот список.
Критерии для принятия решения о том, является ли модуль портативным или непереносимым. В частности, пакет acme-strfry , для которого я хотел бы получить ответы на эти вопросы, представляет собой привязку FFI к strfry
, функции, доступной только в glibc. Является ли пакет непереносимым, потому что он работает только в системах glibc, или переносимым, потому что он не использует никаких расширений языка Haskell? Обычное использование, кажется, подразумевает последнее.
Почему в исходном файле требуется определенный порядок полей и почему он противоположен порядку в сгенерированной документации.