haskell-notes

описанием пакета.

Удаление библиотеки

Установленные с помощью cabal файлы видны из любого модуля. Имена модулей регистрируются гло-

бально. Если нам захочется установить библиотеку с уже зарегистрированным именем, произойдёт хаос.

Возможно прежняя библиотека нам уже не нужна. Как нам удалить её? Посмотрим на решение для компи-

лятора ghc. Мы можем посмотреть список всех зарегистрированных в ghc библиотек с помощью команды:

$ ghc-pkg list

Cabal-1.8.0.6

array-0.3.0.1

base-4.2.0.2

Появится длинный список с именами библиотек. Для удаления одной из них мы можем выполнить ко-

манду:

ghcpkg 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.

Установка библиотек для профилирования

Помните когда-то мы занимались профилированием? Это было в главе, посвящённой устройству GHC.

Мы включали флаг prof и всё шло гладко. Там мы профилировали код, в котором участвовали лишь

стандартные библиотеки из пакета base, такие как Prelude. Но если мы попробуем профилировать код с

какими-нибудь другими библиотеками, установленными с помощью cabal, GHC возмутится и скажет, что

для профилирования не хватает специальной версии библиотеки имярек. Для того чтобы иметь возможность

профилировать код, в котором участвуют другие библиотеки необходимо установить их с возможностью

профилирования. Это делается при установке с помощью специального флага –“enable-library-profiling

или –“enable-executable-profiling (если мы устанавливаем исполняемое приложение):

$ cabal install имярек —reinstall —enable-library-profiling

Библиотека будет установлена в двух экземплярах: для исполнения и профилирования. Возможно биб-

лиотека имярек потребует переустановки некоторых библиотек, от которых она зависит. Повторяем эту про-

цедуру для этих библиотек и возвращаемся к исходной библиотеке. К сожалению, избежать переустановки

библиотек нельзя. Но мы можем сделать так, чтобы все будущие библиотеки устанавливались с возмож-

ностью профилирования. Для этого необходимо отредактировать файл настроек программы cabal. Ищем

директори, в которой cabal хранит свои служебные файлы. Если вы пользуетесь Linux, то скорее всего это

скрытая директория . cabal в вашей домашней директории. Если вы пользуетесь Windows, положение ди-

ректории зависит от версии системы. Но ничего, узнать её положение можно, выполнив в ghci

Prelude> :m System.Directory

Prelude System.Directory> getAppUserDataDirectory ”cabal”

Присмотритесь к этой директории в ней вы найдёте много полезных данных. В ней находятся испол-

няемые программы, скомпилированные библиотеки, а также исходный код библиотек. В этой директории

находится и файл config с настройками для cabal. Ищем строчку с полем libraryprofiling: False. Меня-

ем значение на True и раскомментируем эту строчку, если она закомментирована. После этого cabal install

будет устанавливать библиотеки для профилирования. На первых порах это вызовет массу неудобств из-за

необходимости переустановки многих библиотек.

18.2 Создание документации с помощью Haddock

Если мы зайдём на Hackage, то там мы увидим длинный список пакетов, отсортированных по категориям.

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162