Читаем Учебник по 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

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

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

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

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