Курс знакомит слушателей с функциональными языками программирования и методами программирования на этих языках.
Мы рассмотрим отличия функционального подхода к программированию от традиционного императивного, познакомимся с лямбда-исчислением, как теоретической основой функционального программирования, изучим системы типов функциональных языков и алгоритм вывода типов Хиндли-Дамаса-Милнера.
Мы познакомимся с языком программирования Haskell, изучим ленивую и энергичную семантики, алгебраические типы данных и их использование для сопоставления с образцом. Изучая систему типов языка Haskell, мы обсудим параметрический и специальный полиморфизм и, в частности, механизм классов типов.
Мы изучим основные классы типов из стандартной библиотеки Haskell, в том числе функторы, аппликативные функторы и монады. Мы обсудим различные стратегии свертки и обхода списков, деревьев и познакомимся с обобщением этих операций в классах типов Foldable и Traversable.
Мы научимся программировать, используя стандартные монады, в частности обсудим проблему ввода-вывода в чистых языках и его реализацию в Haskell с помощью монады IO, а также работу с изменяемым состоянием с помощью монады State и родственных ей монад.
Формат курса
Курс проводится в интенсивном формате и разделён на две неравные части. Первая часть (7 занятий по 4 академических часа в вечернее время) пройдёт с 31 января по 7 февраля, воскресенье выходной. Вторая часть курса (еще 6 занятий) запланирована на март.
Критерии выставления оценок за курс
Оценка отлично
выставляется тем, кто наберет 90% баллов и более за выполнение домашних заданий, курсовой работы и тестирования. Оценка хорошо
- тем, кто наберет 75% баллов. Оценка удовлетворительно
(зачет
) - тем, кто наберет 50% баллов.
Литература
Основная
Miran Lipovača, Learn You a Haskell for Great Good! A Beginner’s Guide, 2011 (русский перевод: Миран Липовача, Изучай Haskell во имя добра! Издательство: ДМК Пресс, 2012)
Vitaly Bragilevsky, Haskell in Depth, Manning Publications, 2020
Дополнительная
общетеоретические книги по ФП:
Х. Барендрегт, Ламбда-исчисление, его синтаксис и семантика, М.:Мир, 1985
Филд А., Харрисон П., Функциональное программирование, М.:Мир, 1993
John Harrison, Introduction to Functional Programming (русский перевод)
Simon Peyton Jones, The Implementation of Functional Programming Languages, Prentice Hall, 1987
книги о языке Haskell:
Will Kurt, Get Programming with Haskell, Manning Publications, 2018, 616 pages (русский перевод: Уилл Курт, Программируй на Haskell, М.:ДМК Пресс, 2019)
Richard Bird, Thinking Functionally with Haskell, Cambridge University Press, 2014, 344 pages
Bryan O’Sullivan, Don Stewart, and John Goerzen, Real World Haskell O’Reilly Media, 2008
книги про типы:
Benjamin C. Pierce, Types and Programming Languages, MIT Press, 2002 (русский перевод: Бенджамин Пирс, Типы в языках программирования, Издательство: Лямбда пресс, Добросвет, 2012)
Henk Barendregt, Lambda calculi with types, Handbook of logic in computer science (vol. 2), Oxford University Press, 1993
Henk Barendregt, Wil Dekkers, Richard Statman, Lambda Calculus with Types, Cambridge University Press, 2013
прочие книги:
Саймон Марлоу. Параллельное и конкурентное программирование на языке Haskell. Издательство: ДМК Пресс, 2014
Simon Marlow and Simon Peyton-Jones. The Glasgow Haskell Compiler.
Хороший обзор самых новых англоязычных книг про Haskell сделал Виталий Николаевич Брагилевский. Общие итоги доступны здесь и далее по ссылкам на обзоры конкретных книг.
Видео
Видео всех лекций курса версии 2015 года можно смотреть на канале CS центра на YouTube.