Учебник по Haskell - [15]

Шрифт
Интервал

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

если открыть его в редакторе с четырьмя пробелами вместо табуляции. Поскольку очень часто табуляция

перемежается с пробелами и выравнивание может “поехать”. Поэтому признаком хорошего стиля в Haskell

считается полный отказ от табуляции.

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

Итак подведём итоги: у нас есть две операции для определения типов (сумма и произведение) и по одной

для значений (синонимы), классов типов и экземпляров. А также бесконечное множество их комбинаций, из

которых и состоит увлекательный мир Haskell. Конечно не только из них, есть нюансы, синтаксический сахар,

расширения языка. Об этом и многом другом мы узнаем из этой книги.

Интересно, что в Haskell, несмотря на обилие конструкций и библиотек, ты чувствуешь, что за ними стоит

нечто из мира науки, мира чистого знания. Ты не просто учишься пользоваться определёнными функциями

или классами, а узнаёшь что-то новое и красивое.

1.9 Упражнения

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

комбинирования. У вас есть три операции:

• Сумма типов data T = A1 | A2. Перечисление альтернатив

• Произведение типов data T = S S1 S2. Этим мы говорим, что понятие состоит из нескольких.

• Взятие в список [T]. Обозначает множественное число, элементов типа T их может быть несколько.

Опишите что-либо: комнату, дорогу, город, человека, главу из книги, математическую теорию, всё что

угодно.

Ниже приведён пример для понятий из этой главы:

data Program = Programm ProgramType [Module]

data ProgramType = Executable | Library

data Module = Module [Definition]

data Definition = Definition DefinitionType Element

data DefinitionType = Export | Inner

data Element = ET Type | EV Value | EC Class | EI Instance

data Type

= Type String

data Value

= Value String

data Class

= Class String

data Instance = Instance String

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

совать. Какие функции вам бы хотелось определить в этом описании. Выпишите их типы без определений,

например так:

-- Все объявления типов в модуле

getTypes :: Module -> [Type]

-- Провести редукцию значения:

reduce :: Value -> Program -> Value

-- Проверить типы:

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

checkTypes :: Program -> Bool

-- Заменить все определения в модуле на новые

setDefinitions

:: Module -> [Definition] -> Module

-- Упорядочить определения по какому-лбо принципу

orderDefinitions :: [Definition] -> [Definition]

Подумайте: если у вас есть все эти функции, какие производные значения могли бы вам сказать что-

нибудь интересное.

24 | Глава 1: Основы

Глава 2

Первая программа

Я вот говорю-говорю, а вдруг я вас обманываю, и ничего этого нет. В этой главе мы перейдём к програм-

мированию и запустим нашу первую программу в Haskell. Будет много примеров, на которых мы закрепим

наши знания.

2.1 Интерпретатор

Для запуска кода мы будем пользоваться приложением GHC (Glorious Glasgow Haskell Compiler) наиболее

развитой системой интерпретации Haskell программ. В GHC есть компилятор ghc и интерпретатор ghci. Пока

мы будем пользоваться лишь интерпретатором. Если вы не знаете как установить ghc загляните в приложе-

ние. Также нам понадобится текстовый редактор с подсветкой синтаксиса. Подсветка синтаксиса для Haskell

по умолчанию есть в редакторах Vim, Emacs, gedit, geany, yi. Есть IDE для Haskell Leksah. Мы будем писать

модули в файлах и загружать их в интерпретатор. Если вы не знаете продвинутых текстовых редакторов

вроде Vim или Emacs, лучше всего будет начать с gedit.

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

Мы набираем значение, а интерпретатор редуцирует его и показывает нам ответ. Интерпретатор запускается

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

ми, либо при запуске интерпретатора командой ghci ИмяМодуля. hs либо в самом интерпретаторе командой

:l ИмяМодуля. hs.

Рассмотрим некоторые полезные команды интерпретатора:

:? Выводит на экран список доступных команд

:t Expression Возвращает тип выражения.

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

ния выражения, но и его тип.

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

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

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

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

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

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

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

2.2 У-вей

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

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

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

module Empty where

import Prelude()

| 25

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

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


Рекомендуем почитать
Уголовное право. Особенная часть

В книге кратко изложены ответы на основные вопросы темы «Уголовное право. Особенная часть». Издание поможет систематизировать знания, полученные на лекциях и семинарах, подготовиться к сдаче экзамена или зачета.Пособие адресовано студентам высших и средних образовательных учреждений, а также всем интересующимся данной тематикой.


Уголовно-исполнительное право

В книге кратко изложены ответы на основные вопросы темы «Уголовно-исполнительное право». Издание поможет систематизировать знания, полученные на лекциях и семинарах, подготовиться к сдаче экзамена или зачета.Пособие адресовано студентам высших и средних образовательных учреждений, а также всем интересующимся данной тематикой.


Самоучитель Adobe Premiere 6.5

Книга посвящена возможностям самого популярного средства цифрового видеомонтажа – Adobe Premiere 6.5. Описываются основные приемы работы с программой, приводятся сведения об управлении проектами и клипами, обсуждаются методы монтажа видео и звука, техника создания титров и добавления спецэффектов, а также освещается процесс окончательного монтирования фильма. На примерах рассматриваются все этапы создания и обработки фильмов для телевидения, видео и мультимедиа.Для широкого круга пользователей.


Финансовое право

В учебном пособии в краткой и доступной форме рассмотрены все основные вопросы, предусмотренные государственным образовательным стандартом и учебной программой по дисциплине «Финансовое право».Книга позволит быстро получить основные знания по предмету, а также качественно подготовиться к зачету и экзамену.Рекомендуется студентам, аспирантам и преподавателям по юридическим, экономическим и управленческим специальностям, а также сотрудникам банков.Автор книги, Шевчук Денис Александрович, имеет опыт преподавания различных дисциплин в ведущих ВУЗах Москвы (экономические, юридические, технические, гуманитарные), два высших образования (экономическое и юридическое), более 30 публикаций (статьи и книги), Член Союза Юристов Москвы, Член Союза Журналистов России, Член Союза Журналистов Москвы, Стипендиат Правительства РФ, опыт работы в банках, коммерческих и государственных структурах (в т.ч.


фгос  ответы

Содержащиеся в пособии контрольно-измерительные материалы (КИМы) для 5 класса, аналогичные материалам ЕГЭ, составлены в соответствии с программой общеобразовательных учреждений по русскому языку и учитывают возрастные особенности учащихся. В конце пособия даны ответы на все варианты тестов, предложены диктанты различных типов.Пособие адресовано учителям, ученикам, их родителям и всем, кому необходимо закрепить и систематизировать знания перед ЕГЭ.


Теория литературы. Чтение как творчество

Цель предлагаемого пособия – систематизировать и обогатить представления о природе, структуре и особенностях художественной литературы как вида искусства, помочь совершенствованию читательского мастерства. Книга снабжена кратким словарем основных литературоведческих понятий и терминов (составлен при участии доцента О.В. Быстровой).Для студентов филологических факультетов, учителей, преподавателей литературы высших и средних учебных заведений.