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