[4 of4] Compiling Main
( src /Main.hs, dist /build /hello /hello -tmp /Main.o )
Linkingdist /build /hello /hello ...
Installinglibrary in /home /anton /.cabal /lib /hello -1.0 /ghc -7.4 .1
Installingexecutable(s) in /home /anton /.cabal /bin
Registeringhello -1.0 ...
268 | Глава 18: Средства разработки
Мы видим сообщения о процессе установки. После установки в текущей директории пакета появилась
директория dist, в которую были помещены скомпилированные файлы библиотеки. В последних строках
cabal сообщил нам о том, что он установил библиотеку в директорию:
Installinglibrary in /home /anton /.cabal /lib /hello -1.0 /ghc -7.4 .1
и исполняемый файл в директорию:
Installingexecutable(s) in /home /anton /.cabal /bin
С помощью различных флагов мы можем контролировать процесс установки пакета. Назначать дополни-
тельные директории, указывать куда поместить скомпилированные файлы. Подробно об этом можно почи-
тать в справке, выполнив в командной строке одну из команд:
cabal --help
cabal install --help
Если у вас не получилось сразу установить пакет не отчаивайтесь и почитайте сообщения об ошибках
из cabal, он информативно жалуется о забытых зависимостях и неспособности правильно прочитать файл с
описанием пакета.
Удаление библиотеки
Установленные с помощью cabal файлы видны из любого модуля. Имена модулей регистрируются гло-
бально. Если нам захочется установить библиотеку с уже зарегистрированным именем, произойдёт хаос.
Возможно прежняя библиотека нам уже не нужна. Как нам удалить её? Посмотрим на решение для компи-
лятора ghc. Мы можем посмотреть список всех зарегистрированных в ghc библиотек с помощью команды:
$ ghc-pkg list
Cabal-1.8.0.6
array-0.3.0.1
base-4.2.0.2
...
...
Появится длинный список с именами библиотек. Для удаления одной из них мы можем выполнить ко-
манду:
ghc -pkg unregister имя-библиотеки
Например так мы можем удалить только что установленную библиотеку hello:
$ ghc-pkg unregister hello
Репозиторий пакетов Hackage
Если у нас подключен интернет, то мы можем воспользоваться наследием сообщества Haskell и уста-
новить пакет с Hackage. Там расположено много-много-много пакетов. Любой разработчик Haskell может
добавить свой пакет на Hackage. Посмотреть на пакеты можно на сайте этого репозитория:
http://hackage.haskell.org
Если для вашей задачи необходимо выполнить какую-нибудь довольно общую задачу, например написать
тип красно-чёрных деревьев или построить парсер или возможно вам нужен веб-сервер, поищите этот пакет
на Hackage, он там наверняка окажется, ещё и в нескольких вариантах.
Для установки пакета с Hackageнужно просто написать
cabal install имя-пакета
Возможно нам нужен очень новый пакет, который был только что залит автором на Hackage. Тогда вы-
полняем:
cabal update
Происходит обновление данных о загруженных на Hackage. Что хорошо, вы можете загрузить исходники
из Hackage, например у вас никак не получается написать пакет, который устанавливался бы без ошибок.
Просто загрузим исходники какого-нибудь пакета из Hackageи посмотрим на пример рабочего пакета.
Пакеты | 269
Дополнительные атрибуты пакета
В файле .cabal также часто указывают такие атрибуты как:
MaintainerПоле содержит адрес электронной почты технической поддержки
StabilityСтатус версии библиотеки (стабильная, экспериментальная, нестабильная).
DescriptionПодробное описание назначения пакета. Оно помещается на главную страницу пакета в доку-
ментации.
Extra-Source-FilesВ этом поле можно через пробел указать дополнительные файлы, включаемые в пакет.
Это могут быть примеры использования, описание в формате PDF или хроника изменений и другие
служебные файлы.
License-fileПуть к файлу с лицензией.
ghc-optionsФлаги компиляции для GHC. Если в нашей библиотеке мы активно пользуемся продвинуты-
ми прагмами оптимизации, необходимо сообщить об этом компилятору пользователя. Например, мы
можем написать в этом атрибуте -Oили -O2.
Установка библиотек для профилирования
Читать дальше