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

:set +s После выполнения команды интерпретатор будет выводить на экран не только результат вычисле-

ния выражения, но и статистику вычислений.

:l ИмяМодуля Загружает модуль в интерпретатор.

:cd Директория Перейти в данную директорию.

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

модуль изменений.

:q Выход из интерпретатора.

2.2 У-вей

Согласно даосам основной принцип жизни заключается в недеянии (у-вей). Всё происходит естественно и

словно само собой. Давайте создадим модуль который ничего не делает. Создадим пустой модуль и загрузим

его в интерпретатор.

module Empty where

import Prelude()

| 25

Зачем мы написали import Prelude()? Этой фразой мы говорим, что не хотим ничего импортировать

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

полезных определений. К примеру там определяется тип Bool, списки и функции для них, символы, классы

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

я хочу сделать акцент на самом языке Haskell, а не на производных выражениях, поэтому пока мы будем в

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

Сохраним модуль в файле Empty. hs, сделаем директорию модуля текущей и запустим интерпретатор

командой ghci Empty (имя расширения можно не писать). Также можно просто запустить интерпретатор

командой ghci, переключиться на директорию командой :cd и загрузить модуль командой :l Empty.

$ ghci

GHCi, version 7.4.1: http://www.haskell.org/ghc/

:? for help

Loading package ghc-prim ... linking ... done.

Loading package integer-gmp ... linking ... done.

Loading package base ... linking ... done.

Prelude> :cd ~/haskell-notes/code/ch-2/

Prelude> :l Empty.hs

[1 of 1] Compiling Empty

( Empty.hs, interpreted )

Ok, modules loaded: Empty.

*Empty>

Слева от знака приглашения к вводу > отображаются загруженные в интерпретатор модули. По умол-

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

Empty.

Теперь давайте потренируемся перезагружать модули. Давайте изменим наш модуль, сделаем его не та-

ким пустым, убрав последние две скобки от модуля Prelude в директиве import. Теперь сохраним изменения

и выполним команду :r.

*Empty> :r

[1 of 1] Compiling Empty

( Empty. hs, interpreted )

Ok, modules loaded: Empty.

*Empty>

Завершим сессию интерпретатора командой :q.

*Empty> :q

Leaving GHCi.

Внешние модули должны находится в текущей директории. Давайте потренируемся с подключением

определений из внешних модулей. Создадим модуль близнец модуля Empty. hs:

module EmptyEmpty where

import Prelude()

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

из модуля EmptyEmpty:

module Empty where

import EmptyEmpty

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

тории с модулем Empty директорию Sub, а в неё поместим копию модуля Empty. Существует одна тонкость:

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

ходимо дописать через точку имя директории в которой он находится:

module Sub.Empty where

Теперь мы можем загрузить этот модуль из исходного:

module Empty where

import EmptyEmpty

import Sub.Empty

Обратите внимание на то, что мы приписываем к модулю в поддиректории Sub имя поддиректории. Если

бы он был заложен в ещё одной директории, то мы написали бы через точку имя и этой поддиректории:

module Empty where

import Sub1.Sub2.Sub3.Sub4.Empty

26 | Глава 2: Первая программа

2.3 Логические значения

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

ления в модуль, загрузим его в интерпретатор и понабираем значения.

Начнём с логических операций. Давайте не будем переопределять Bool, Show и Eq, а просто возьмём их

из Prelude:

module Logic where

import Prelude(Bool(.. ), Show(.. ), Eq(.. ))

Две точки в скобках означают “все конструкторы” (в случае типа) и “все методы” (в случае класса типа).

Строчку

import Prelude(Bool(.. ), Show(.. ), Eq(.. ))

Следует читать так: Импортируй из модуля Prelude тип Bool и все его конструкторы и классы Show и

Eq со всеми их методами. Если бы мы захотели импортировать только конструктор True, мы бы написали

Bool(True), а если бы мы захотели импортировать лишь имя типа, мы бы написали просто Bool без скобок.

Сначала выпишем в модуль наши синонимы:

module Logic where

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

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

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

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

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

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

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

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

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