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