чае необходимо либо переложить созданные бинарные файлы в директорию, которая будет им видна, или
добавить директорию с новыми бинарными файлами в PATH(под UNIX, Linux). Переменная операционной
системы PATH содержит список всех путей, в которых система ищет исполняемые программы, если путь не
указан явно. Посмотреть содержание PATHможно, вызвав:
$ echo $PATH
Появится строка директорий, которые записаны через двоеточие. Для того чтобы добавить директорию
/data/dir в PATHнеобходимо написать:
$ PATH=$PATH:/data/dir
Эта команда добавит директорию в PATHдля текущей сессии в терминале, если мы хотим записать её
насовсем, мы добавим эту команду в специальный скрытый файл .bashrc, он находится в домашней дирек-
тории пользователя. Под Windows добавить директорию в PATHможно с помощью графического интерфейса.
Кликните правой кнопкой мыши на иконку My Computer(Мой Компьютер), в появившемся меню выбери-
те вкладку Properties(Свойства). Появится окно System Properties(Свойства системы), в нём выберите
вкладку Advancedи там нажмите на кнопку Environmentvariables (Переменные среды). И в этом окне будет
строка 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
Version:
1.0
Cabal-Version:
>=1.2
License:
BSD3
Author:
Anton
Synopsis:
Littleexample ofcabal usage
Category:
Example
Build-Type:
Simple
Library
Build-Depends:base ==4 .*
Hs-Source-Dirs:src /
Exposed-modules :
Hello
Other-Modules:
Utility.Hello
Utility.World
Executablehello
Build-Depends:base ==4 .*
Main-Is: Main.hs
Hs-Source-Dirs:src /
В этом файле мы описали библиотеку и программу. В строке base ==4 .*мы указали версию пакета base.
Запись 4 .*означает любая версия, которая начинается с четвёрки. Осталось только поместить в корневую
директорию пакета файл Setup.hs.
import Distribution.Simple
main =defaultMain
Теперь мы можем переключиться на корневую директорию пакета и установить пакет:
anton @anton -desktop :~/haskell -notes /code /ch -17 /hello $cabal install
Resolvingdependencies ...
Configuringhello -1.0 ...
Preprocessinglibrary hello -1.0 ...
Preprocessingexecutables for hello -1.0 ...
Buildinghello -1.0 ...
[1 of3] Compiling Utility.World
( src /Utility/World.hs, dist /build /Utility/World.o )
[2 of3] Compiling Utility.Hello
( src /Utility/Hello.hs, dist /build /Utility/Hello.o )
[3 of3] Compiling Hello
( src /Hello.hs, dist /build /Hello.o )
Registeringhello -1.0 ...
[1 of4] Compiling Utility.World
( src /Utility/World.hs, dist /build /hello /hello -tmp /Utility/World.o )
[2 of4] Compiling Utility.Hello
( src /Utility/Hello.hs, dist /build /hello /hello -tmp /Utility/Hello.o )
[3 of4] Compiling Hello
( src /Hello.hs, dist /build /hello /hello -tmp /Hello.o )
Читать дальше