52700.fb2
cabal install
Если мы нигде не ошиблись в описании пакета, не перепутали табуляцию с пробелами при отступах, или
указали без ошибок все зависимости, то пакет успешно установится. Если это библиотека, то мы сможем
подключать экспортируемые ей модули в любом другом модуле, просто указав их в директиве import. При
этом нам уже не важно, где находятся модули библиотеки. Мы имеем возможность импортировать их из
любого модуля. Если же пакет был исполняемой программой, будут созданы бинарные файлы программ. В
конце cabal сообщит нам куда он их положил.
Иногда возникают проблемы с пакетами, которые генерируют исполняемые файлы, а затем с их помощью
устанавливают другие пакеты. Проблема возникает из-за того, что cabal может положить бинарный файл в
директорию, которая не видна следующим программам, которые хотят продолжить установку. В этом слу-
чае необходимо либо переложить созданные бинарные файлы в директорию, которая будет им видна, или
добавить директорию с новыми бинарными файлами в PATH (под UNIX, Linux). Переменная операционной
системы PATH содержит список всех путей, в которых система ищет исполняемые программы, если путь не
указан явно. Посмотреть содержание PATH можно, вызвав:
$ echo $PATH
Появится строка директорий, которые записаны через двоеточие. Для того чтобы добавить директорию
/data/dir в PATH необходимо написать:
$ PATH=$PATH:/data/dir
Эта команда добавит директорию в PATH для текущей сессии в терминале, если мы хотим записать её
насовсем, мы добавим эту команду в специальный скрытый файл . bashrc, он находится в домашней дирек-
тории пользователя. Под Windows добавить директорию в PATH можно с помощью графического интерфейса.
Кликните правой кнопкой мыши на иконку My Computer (Мой Компьютер), в появившемся меню выбери-
те вкладку Properties (Свойства). Появится окно System Properties (Свойства системы), в нём выберите
вкладку Advanced и там нажмите на кнопку Environment variables (Переменные среды). И в этом окне будет
строка Path, её мы и хотим отредактировать, добавив необходимые нам пути.
Давайте потренируемся и создадим библиотеку и исполняемую программу. Создадим библиотеку, кото-
рая выводит на экран Hello World. Создадим директорию hello, и в ней создадим директорию src. Эта ди-
ректория будет содержать исходный код. Главный модуль библиотеки экспортирует функцию приветствия:
module Hello where
import Utility.Hello(hello)
import Utility.World(world)
helloWorld = hello ++ ”, ” ++ world ++ ”!”
Главный модуль программы Main. hs определяет функцию main, которая выводит текст приветствия на
экран:
Пакеты | 267
module Main where
import Hello
main = print helloWorld
У нас будет два внутренних модуля, каждый из которых определяет синоним для одного слова. Мы по-
местим их в папку Utility. Это модуль Utility.Hello
module Utility.Hello where
hello = ”Hello”
И модуль Utility.World:
module Utility.World where
world = ”World”
Исходники готовы, теперь приступим к описанию пакета. Создадим в корневой директории пакета файл
hello. cabal.
Name:
hello