haskell-notes

Значение Tfm k d обозначает линейную функцию

f ( x) = kx + d

Для того чтобы получить настоящие отсчёты по времени мы применяем её к временным координатам

“не преобразованного” события, то есть события Event 0 1 a.

Единственное, что нам нужно для того чтобы встроить этот вариант в библиотеку это написать функцию:

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

fromTList :: TList t a -> [Event t a]

И конечно переопределить все функции композиции. Но все сложные функции, которые отвечают за

перевод из Track в Midi останутся прежними.

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

В этой главе мы построили секвенсор для создания midi-файлов. Мы воспользовались библиотекой

HCodecs и создали над ней небольшую надстройку.

В нашей библиотеке примитивными конструкциями были события, параллельная композиция (одновре-

менное воспроизведение) и преобразование событий во времени (сдвиг и масштабирование). Все остальные

операции выражались через эти простейшие операции. Отметим, что есть и другие подходы. Например в биб-

лиотеках Haskore и Euterpea примитивными конструкциями является единичное событие (без отметок во

времени) и параллельная и последовательная композиции. Подход, который мы рассмотрели в более общем

виде реализован в библиотеках temporalmusicnotation и temporalmusicnotationdemo.

316 | Глава 21: Музыкальный пример

21.8 Упражнения

• Попробуйте написать какую-нибудь мелодию.

• Подумайте каких операций не хватает. Например было бы удобно иметь возможность вырезать из ме-

лодии куски. Так в примере у нас остались хвосты от ударной секции, определите операцию, которая

позволяет убрать лишнее.

Упражнения | 317

Приложения

318 | Приложения

Начало работы с Haskell

Компилятор

Для программирования в Haskell нам понадобится компилятор. Мы будем пользоваться наиболее разви-

тым компилятором~– GHC. Лучше всего устанавливать его вместе с Haskell Platform:

http://hackage.haskell.org/platform/

Haskell Platform содержит стабильную версию компилятора и много хороших, проверенных временем

библиотек. Если по каким-то причинам установить Haskell Platform не удалось. Не отчаивайтесь, можно

загрузить компилятор с сайта GHC:

http://www.haskell.org/ghc/

И далее установить все необходимые библиотеки с Hackage с помощью cabal (устанавливается отдельно

с http://www.haskell.org/cabal/).

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

Для Haskell существует очень мало сред разработки. Обычно на Haskell программируют в каких-нибудь

продвинутых текстовых редакторах (vim, Emacs, scite, kate, notepad++). Отметим всё же среду разработки

Leksah (http://leksah.org/), она написана на Haskell и её можно установить с Hackage.

Если вы не хотите разбираться с новым текстовым редактором или средой разработки, и вам нужна лишь

подсветка синтаксиса можно воспользоваться gedit. Пишем код в gedit, сохраняем, переключаемся на ghci,

пробуем, обновляем, пробуем, при случае компилируем или собираем в пакет. Всё это можно делать и в

gedit.

Начало работы с Haskell | 319

Литература

О Haskell написано много интересных книг и статей, но все они на английском. На русском языке выходит

электронный журнал “Практика функционального программирования” (). Пока в нём доминируют два языка

– это Erlang и Haskell.

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

в создании этой книги.

Книги

• Miran Lipovac?a. Learn You A Haskell For A Great Good.

Очень хорошая книга для начинающих, Haskell в картинках. Весёлая и познавательная книга1

http://learnyouahaskell.com/

• Hal Daume III. Yet Another Haskell Tutorial.

Ещё одна очень хорошая книга для начинающих. Без картинок, но всё по делу.

• Paul Hudak. Haskell School of Expression.

Книга, которая иллюстрирует основные принципы функционального программирования на примере

Haskell. Главные достоинства – много текста об общих принципах и интересные приложения, картинки,

музыка, анимация, управление роботами и всё это на Haskell.

• Paul Hudak. Haskell School of Music.

Пол Хьюдак увлекается не только Haskell, но и музыкой. Он написал книгу, которая целиком посвящена

описанию музыки в Haskell:

http://www.cs.yale.edu/homes/hudak/Papers/HSoM.pdf

http://haskell.cs.yale.edu/

• Bryan O’Sullivan, Don Stewart, John Goerzen. Real World Haskell.

Очень полезная книга в помощь тем, кто хочет научиться писать настоящие, серьёзные программы.

Авторы подробно изучают вопросы, связанные с применением Haskell на практике.

http://book.realworldhaskell.org/

• Готовится к выходу к книга Саймона Марлоу о параллельных вычислениях в Haskell. Обещает быть

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

Тематический сборник

Основы

• John Hughes. Why Functional Programming Matters.

• Paul Hudak, John Hughes, Simon Peyton Jones, Philip Wadler. A History of Haskell: Being Lazy With Class.

• Mark P. Jones. Functional Programming with Overloading and Higher-Order Polymorphism.

• Евгений Кирпичев. Элементы функциональных языков программирования, журнал Практика функци-

онального программирования.

• Simon Thompson. Programming It in Haskell.

• Justin Bailey. Haskell Cheat Sheet.

Разработка программ сверху-вниз

• Дмитрий Астапов. Давно не брал я в руки шашек, журнал Практика функционального программиро-

вания.

1Обновление: книга переведена на русский, вышла в издательстве ДМК Пресс.

320 | Приложения

Функторы и монады

• Conor McBride, Ross Paterson. Applicative programming with effects. Статья об аппликативных функторах.

• Philip Wadler. The Essence of Functional Programming.

Статья, в которой впервые зашла речь о применении монад в Haskell.

• Tarmo Uustalu, Varmo Vene. The Essence of Dataflow Programming.

Статья о комонадах, но есть много интересного и о монадах.

• Bulat Ziganshin. Haskell I/O inside: Down the Rabbit’s Hole. Статья на HaskellWiki.

• John Launchbury, Simon Peyton Jones. Lazy functional state threads.

Статья о типе ST.

• Simon Peyton Jones. Tackling the Awkward Squad: monadic input/output, concurrency, exceptions, and

foreign-language calls in Haskell.

Ленивые вычисления

• Douglas McIlroy. Power Series, Power Serious.

• Дмитрий Астапов. Реурсия+мемоизация=динамическое программирование, журнал Практика функ-

ционального программирования.

• Сергей Зефиров. Лень бояться, журнал Практика функционального программирования.

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

• Jerzy Karczmarczuk. Specific “scientific” data structures, and their processing.

Структурная рекурсия

• Graham Hutton. A tutorial on the universality and expressiveness of fold

• Jeremy Gibbons. Origami Programming.

• Jeremy Gibbons, Geraint Jones. The Under-Appreciated Unfold.

Лямбда-исчисление и функциональное программирование

• Шалак В.И. Шейнфинкель и комбинаторная логика.

• Paul Hudak: Conception, Evolution, and Application of Functional Programming Languages.

Длинная статья о развитии функциональных языков. Там есть главы о лямбда-исчислении.

• Бенджамин Пирс. Типы в языках программирования.

Большая книга о теории типов.

http://newstar.rinet.ru/~goga/tapl/

• Денис Москвин. Системы типизации лямбда-исчисления.

Курс видео-лекций.

Читай продолжение на следующей странице
Добавить комментарии