Получение имен модулей, включенных в пакет cabal, из анализа файла .cabal

Интересно, есть ли способ получить имена модулей пакета клики из разбора файлов .cabal.

Я пытался использовать parsePackageDescription из Distribution.PackageDescription.Parse, но, например, когда я пытаюсь проанализировать .cabal самого пакета Cabal (http://hackage.haskell.org/package/Cabal-1.18.1.2/Cabal.cabal) библиотечное значение PackageDescription равно Nothing, хотя библиотека есть раздел с открытыми модулями и другими модулями в файле .cabal.

Так задумано или я что-то не так делаю? Кроме того, если это предназначено, кто-нибудь знает какой-либо другой простой способ получения имен модулей?

Заранее спасибо!


person majstroll    schedule 01.04.2014    source источник
comment
Какую версию Cabal вы используете? Я только что попробовал, и у меня не было проблем с разбором собственного файла .cabal Cabal с использованием Cabal 1.18.1.2, включая раздел библиотеки. Не могли бы вы рассказать нам, что именно вы сделали?   -  person fjh    schedule 02.04.2014
comment
Я использую ghc 7.6.3 с Cabal 1.18.1. Я читаю файл Cabal, а затем запускаю parsePackageDescription для результата чтения. Синтаксический анализ работает несколько нормально, поскольку заполняются несколько полей, таких как автор и описание. Однако раздел библиотеки для меня ничего не анализирует.   -  person majstroll    schedule 02.04.2014
comment
А, кажется, я знаю, в чем проблема. Когда вы анализируете пакет с помощью parsePackageDescription, вы получаете значение типа GenericPackageDescription. Чтобы получить окончательный PackageDescription, вам нужно запустить функцию flattenPackageDescription из файла Distribution.PackageDescription.Configuration. Это окончательное описание пакета должно содержать информацию о библиотеке.   -  person fjh    schedule 03.04.2014
comment
Спасибо! Кажется, это помогает. Я думал, что должен получить тот же результат, извлекая значение PackageDescription из GenericPackageDescription, и не знал о функции flattenPackageDescription.   -  person majstroll    schedule 03.04.2014