Читаем Учебник по Haskell полностью

регруженных строках, как раз для этого существует расширение OverloadedStrings. При этом за обычной

записью строк может скрываться любой тип из класса:

class IsString a where

fromString :: String -> a

Расширение TypeOperators позволяет определять инфиксные имена не только для конструкторов типов,

но и для самих типов, синонимов типов и даже классов:

data a :+: b = Left a | Right b

17.3 Краткое содержание

В этой главе мы затронули малую часть возможностей, которые предоставляются системой ghc. Haskell

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

ских целях в 1998 году был зафиксирован стандарт языка, его обычно называют Haskell98. Любое расшире-

ние подключается с помощью специальной прагмы Language. Новый стандарт Haskell Prime включит в себя

наиболее устоявшиеся расширения. Также мы рассмотрели несколько полезных классов и синтаксических

конструкций, которые, возможно, облегчают написание программ.

17.4 Упражнения

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

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

вам в чужом коде или в библиотеках.

264 | Глава 17: Дополнительные возможности

Глава 18

Средства разработки

В этой главе мы познакомимся с основными средствами разработки больших программ. Мы научимся

устанавливать и создавать библиотеки, писать документацию.

18.1 Пакеты

В Haskell есть ещё один уровень организации данных, мы можем объединять модули в пакеты (package).

Также как и модули пакеты могут зависеть от других пакетов, если они пользуются модулями их этих па-

кетов. Одним пакетом мы уже пользовались и довольно часто, это пакет base, который содержит все стан-

дартные модули, например такие как Prelude, Control.Applicative или Data.Function. Для создания и

установки пакетов существует приложение cabal. Оно определяет протокол организации и распростране-

ния модулей Haskell.

Создание пакетов

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

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

поместить в одну директорию с src два файла:

имяПакета. cabal – файл с описанием пакета.

Setup. hs – файл с инструкциями по установке пакета

.cabal

Посмотрим на простейший файл с описанием библиотеки, этот файл находится в одной директории с

той директорией, в которой содержатся все модули приложения и имеет расширение . cabal:

Name

: Foo

Version

: 1.0

Library

build-depends

: base

exposed-modules

: Foo

Сначала идут свойства пакета. Общий формат определения свойства:

ИмяСвойства : Значение

В примере мы указали имя пакета Foo, и версию 1.0. После того, как мы указали все свойства, мы опре-

деляем будет наш пакет библиотекой или исполняемой программой или возможно он будет и тем и другим.

Если пакет будет библиотекой, то мы помещаем за набором атрибутов слово Library, а если это исполняе-

мая программа, то мы помещаем слово Executable, после мы пишем описание модулей пакета, зависимости

от других пакетов, какие модули будут видны пользователю. Формат составления описаний в этой части та-

кой же как и в самом начале файла. Сначала идёт зарезервированное слово-атрибут, затем через двоеточие

следует значение. Обратите внимание на отступы за словом Library, они обязательны и сделаны с помощью

пробелов, cabal не воспринимает табуляцию.

Файл . cabal может содержать комментарии, они делаются также как и в Haskell, закомментированная

строка начинается с двойного тире.

| 265

Setup.hs

Файл Setup. hs содержит информацию о том как устанавливается библиотека. При установке могут ис-

пользоваться другие программы и библиотеки. Пока мы будем пользоваться простейшим случаем:

import Distribution.Simple

main = defaultMain

Этот файл позволяет нам создавать библиотеки и приложения, которые созданы только с помощью

Haskell. Это не так уж и мало!

Создаём библиотеки

Типичный файл . cabal для библиотеки выглядит так:

Name:

pinocchio

Version:

1.1. 1

Cabal-Version:

>= 1.2

License:

BSD3

License-File:

LICENSE

Author:

Mister Geppetto

Homepage:

http://pinocchio. sourceforge. net/

Category:

AI

Synopsis:

Tools for creation of woodcrafted robots

Build-Type:

Simple

Library

Build-Depends: base

Hs-Source-Dirs: src/

Exposed-modules:

Wood.Robot.Act, Wood.Robot.Percept, Wood.Robot.Think

Other-Modules:

Wood.Robot.Internals

Перейти на страницу:

Похожие книги

C++: базовый курс
C++: базовый курс

В этой книге описаны все основные средства языка С++ - от элементарных понятий до супервозможностей. После рассмотрения основ программирования на C++ (переменных, операторов, инструкций управления, функций, классов и объектов) читатель освоит такие более сложные средства языка, как механизм обработки исключительных ситуаций (исключений), шаблоны, пространства имен, динамическая идентификация типов, стандартная библиотека шаблонов (STL), а также познакомится с расширенным набором ключевых слов, используемым в .NET-программировании. Автор справочника - общепризнанный авторитет в области программирования на языках C и C++, Java и C# - включил в текст своей книги и советы программистам, которые позволят повысить эффективность их работы. Книга рассчитана на широкий круг читателей, желающих изучить язык программирования С++.

Герберт Шилдт

Программирование, программы, базы данных