Парадигма | Чисто функциональный |
---|---|
Разработано | Леннарт Аугустссон , Дэйв Бартон, Брайан Бутель, Уоррен Бертон, Джозеф Фазел, Кевин Хаммонд, Ральф Хинце, Пол Худак , Джон Хьюз , Томас Джонссон, Марк Джонс, Саймон Пейтон Джонс , Джон Лаанчбери , Эрик Мейер , Джон Петерсон, Аластер Рид, Колин Рансимен, Филип Уодлер |
Впервые появился | 1990 [1] |
Стабильный выпуск | Haskell 2010 [2] / июль 2010 г . |
Предварительный выпуск | Анонсирован Haskell 2020 [3] |
Печатная дисциплина | Предполагаемый , статический , сильный |
Операционные системы | Кроссплатформенность |
Расширения имени файла | .hs, .lhs |
Веб-сайт | www |
Основные реализации | |
GHC , Hugs , NHC, JHC, Yhc , UHC | |
Диалекты | |
Гелий , Гофер | |
Под влиянием | |
Clean , [4] FP , [4] Gofer , [4] Hope and Hope + , [4] Id , [4] ISWIM , [4] KRC , [4] Lisp , [4] Miranda , [4] ML и Стандартный ML , [4] Оруэлл , SASL , [4] Схема , [4] SISAL [4] | |
Под влиянием | |
Agda , [5] Bluespec , [6] C ++ 11 / Concepts , [7] C # / LINQ , [8] [9] [10] [11] CAL, [ необходима ссылка ] Cayenne , [8] Clean , [ 8] Clojure , [12] CoffeeScript , [13] Карри , [8] Элм , Эпиграмма , [ необходима ссылка ] Эшер , [14] F # , [15] Фреге , [16] Hack , [17] Идрис , [18] Изабель , [8] Java / Непатентованные , [8] LiveScript , [19] Ртуть , [8] Ωmega , PureScript , [20] Python , [8] [ 21] Раку , [22] Руст , [23] Скала , [8] [24] Свифт , [25] Тимбер , [26] Visual Basic 9.0 [8] [9] |
Haskell / ч æ s к əl / [27] является универсальным , статический типизированным , чисто функциональным языком программирования с умозаключением типа и ленивыми вычислениями . [28] [29] Разработанный для обучения, исследований и промышленного применения, Haskell является пионером в использовании ряда передовых функций языка программирования, таких как классы типов , которые позволяют осуществлять безопасную перегрузку операторов . Основная реализация Haskell - компилятор Glasgow Haskell (GHC). Он назван в честьлогик Хаскелл Карри . [1]
Семантика Haskell исторически основана на семантике языка программирования Miranda , на котором сосредоточены усилия первоначальной рабочей группы Haskell. [30] Последняя формальная спецификация языка была сделана в июле 2010 года, в то время как разработка GHC расширила Haskell за счет расширений языка. Следующая формальная спецификация была запланирована на 2020 год. [3] [ требуется обновление ]
Haskell используется в академических кругах и промышленности. [31] [32] По состоянию на сентябрь 2020 года Haskell был 28-м по популярности языком программирования с точки зрения поиска в Google [33] учебных пособий и составлял менее 1% активных пользователей репозитория исходного кода GitHub. [34]
История [ править ]
После выпуска Miranda компанией Research Software Ltd. в 1985 году интерес к ленивым функциональным языкам вырос. К 1987 году существовало более десятка нестрогих , чисто функциональных языков программирования. Миранда была наиболее широко используемой, но это была проприетарная программа . На конференции по языкам функционального программирования и компьютерной архитектуре (FPCA '87) в Портленде, штат Орегон , был достигнут твердый консенсус в отношении создания комитета для определения открытого стандарта для таких языков. Целью комитета было объединить существующие функциональные языки в общий, который послужит основой для будущих исследований в области проектирования функциональных языков. [35]
Haskell 1.0–1.4 [ править ]
Классы типов , которые обеспечивают безопасную перегрузку операторов , были впервые предложены Филипом Вадлером и Стивеном Блоттом для Standard ML, но впервые были реализованы в Haskell между 1987 и версией 1.0. [36] [37]
Первая версия Haskell («Haskell 1.0») была определена в 1990 году. [1] Усилия комитета привели к серии определений языка (1.0, 1.1, 1.2, 1.3, 1.4).
Haskell 98 [ править ]
В конце 1997 года серия завершилась выпуском Haskell 98 , предназначенного для определения стабильной минимальной переносимой версии языка и сопутствующей стандартной библиотеки для обучения, а также в качестве основы для будущих расширений. Комитет прямо приветствовал создание расширений и вариантов Haskell 98 путем добавления и включения экспериментальных функций. [35]
В феврале 1999 года языковой стандарт Haskell 98 был первоначально опубликован как The Haskell 98 Report . [35] В январе 2003 года пересмотренная версия была опубликована как Haskell 98 Language and Libraries: The Revised Report . [29] Язык продолжает быстро развиваться, и реализация Glasgow Haskell Compiler (GHC) представляет собой текущий стандарт де-факто . [38]
Haskell 2010 [ править ]
В начале 2006 года начался процесс определения преемника стандарта Haskell 98, неофициально названного Haskell Prime . [39] Предполагалось, что это будет непрерывный поэтапный процесс пересмотра определения языка, производящий новую редакцию до одного раза в год. Первая ревизия, названная Haskell 2010 , была анонсирована в ноябре 2009 года [2] и опубликована в июле 2010 года.
Haskell 2010 - это инкрементное обновление языка, в основном включающее несколько хорошо используемых и неоспоримых функций, ранее включенных с помощью специфичных для компилятора флагов.
- Имена иерархических модулей. Имена модулей могут состоять из разделенных точками последовательностей идентификаторов с заглавной буквы, а не только одного такого идентификатора. Это позволяет именовать модули иерархическим образом (например,
Data.List
вместоList
), хотя технически модули все еще находятся в едином монолитном пространстве имен. Это расширение было указано в дополнении к Haskell 98 и на практике использовалось повсеместно. - Интерфейс внешних функций (FFI) допускает привязку к другим языкам программирования. В отчете указаны только привязки к C , но дизайн позволяет привязки других языков. Для поддержки этого объявления типов данных разрешалось не содержать конструкторов, что позволяло использовать надежные типы nonce для внешних данных, которые не могли быть созданы в Haskell. Это расширение также было ранее указано в дополнении к отчету Haskell 98 и широко использовалось.
- Так называемые n + k паттерны (определения формы
fact (n+1) = (n+1) * fact n
) больше не допускались. Этот синтаксический сахар имел вводящую в заблуждение семантику, в которой код выглядел так, как будто он использовал(+)
оператор, но на самом деле не содержал кода, использующего(-)
и(>=)
. - Правила вывода типов были ослаблены, чтобы позволить большему количеству программ выполнять проверку типов.
- Некоторые синтаксические проблемы (изменения в формальной грамматике) были исправлены: были добавлены шаблоны защиты, позволяющие сопоставление шаблонов внутри средств защиты; разрешение фиксации оператора задано более простым способом, отражающим реальную практику; Был рассмотрен крайний случай взаимодействия лексического синтаксиса языка операторов и комментариев, а взаимодействие do-notation и if-then-else было изменено для устранения неожиданных синтаксических ошибок.
LANGUAGE
Прагма была указана. К 2010 году десятки расширений языка широко использовались, и GHC (среди других компиляторов) предоставилLANGUAGE
прагму для определения отдельных расширений со списком идентификаторов. Компиляторы Haskell 2010 должны поддерживать этоHaskell2010
расширение, и рекомендуется поддерживать несколько других, которые соответствуют расширениям, добавленным в Haskell 2010.
Особенности [ править ]
Haskell особенность ленивых вычислений , лямбда - выражение , сопоставление с образцом , список понимания , классы типов и типа полиморфизма . Это чисто функциональный язык , а это означает, что функции обычно не имеют побочных эффектов . Существует отдельная конструкция для представления побочных эффектов, ортогональных типу функций. Чистая функция может возвращать побочный эффект, который впоследствии выполняется, моделируя нечистые функции других языков.
Haskell имеет сильный , статический тип системы , основанный на умозаключения типа Хиндли-Милнера . Его основным нововведением в этой области являются классы типов, изначально задуманные как принципиальный способ добавить к языку перегрузки [40], но с тех пор они нашли гораздо больше применений. [41]
Конструкция, представляющая побочные эффекты, является примером монады : общей структуры, которая может моделировать различные вычисления, такие как обработка ошибок, недетерминизм , синтаксический анализ и программная транзакционная память . Они определены как обычные типы данных, но Haskell предоставляет некоторый синтаксический сахар для их использования.
У Haskell есть открытая опубликованная спецификация [29], и существует множество реализаций . Его основная реализация, Glasgow Haskell Compiler (GHC), представляет собой как интерпретатор, так и компилятор машинного кода , работающий на большинстве платформ. GHC известен своей богатой системой типов, включающей последние инновации, такие как обобщенные алгебраические типы данных и семейства типов. Игра Computer Language Benchmarks Game также подчеркивает свою высокопроизводительную реализацию параллелизма и параллелизма . [42]
Вокруг языка существует активное, растущее сообщество, и более 5400 сторонних библиотек и инструментов с открытым исходным кодом доступны в онлайн-репозитории пакетов Hackage . [43]
Примеры кода [ править ]
"Hello, World!" программа на Haskell (строго необходима только последняя строка):
модуль Main ( main ) где - не требуется в интерпретаторе, используется по умолчанию в файле модуляmain :: IO () - компилятор может вывести определение этого типа main = putStrLn "Hello, World!"
Факторный функция в Haskell, определяется несколькими различными способами:
- Аннотация типа (необязательно, одинаковая для каждой реализации) factorial :: ( Integral a ) => a -> a- Использование рекурсии (с выражением ifthenelse) факториал n = если n < 2, то 1 иначе n * факториал ( n - 1 )- Использование рекурсии (с сопоставлением с образцом) факториал 0 = 1 факториал n = n * факториал ( n - 1 )- Использование рекурсии (с охранниками) факториала n | n < 2 = 1 | в противном случае = n * факториал ( n - 1 )- Использование списка и факториала функции "product" n = product [ 1 .. n ]- Использование fold (реализует "product") факториал n = foldl ( * ) 1 [ 1 .. n ]- Бесточечный стиль factorial = foldr ( * ) 1 . enumFromTo 1
Поскольку тип Integer имеет произвольную точность , этот код будет вычислять такие значения, как factorial 100000
(456,574-значное число), без потери точности.
Реализация алгоритма, похожего на быструю сортировку по спискам, где первый элемент берется за точку поворота:
- Аннотация типа (необязательно, одинаковая для каждой реализации) quickSort :: Ord a => [ a ] -> [ a ]- Использование списков quickSort [] = [] - Пустой список уже отсортирован quickSort ( x : xs ) = quickSort [ a | a <- xs , a < x ] - отсортировать левую часть списка ++ [ x ] ++ - вставить точку поворота между двумя отсортированными частями quickSort [ a | a <- xs , a > = x ] - отсортировать правую часть списка- Использование фильтра quickSort [] = [] quickSort ( x : xs ) = quickSort ( filter ( < x ) xs ) ++ [ x ] ++ quickSort ( filter ( > = x ) xs )
Реализации [ править ]
Все перечисленные реализации распространяются по лицензиям с открытым исходным кодом . [44]
Реализации, которые полностью или почти соответствуют стандарту Haskell 98, включают:
- Glasgow Haskell Compiler (GHC) компилируется в машинный код на многих различных архитектурах процессоров, и в ANSI C , с помощью одного из двух промежуточных языков : C-- , или в более поздних версиях, LLVM (ранее Low Level Virtual Machine) битовый код. [45] [46] GHC стал де-факто стандартным диалектом Haskell. [47] Существуют библиотеки (например, привязки к OpenGL ), которые работают только с GHC. GHC также распространяется с платформой Haskell .
- Jhc, компилятор Haskell, написанный Джоном Мичемом, подчеркивает скорость и эффективность сгенерированных программ и исследует новые преобразования программ.
- Ajhc - это форк Jhc.
- Utrecht Haskell Compiler (UHC) - это реализация Haskell от Утрехтского университета . [48] Он поддерживает почти все возможности Haskell 98 плюс множество экспериментальных расширений. Он реализован с использованием атрибутных грамматик и в настоящее время используется в основном для исследования систем генерируемых типов и языковых расширений.
Реализации, которые больше не поддерживаются активно, включают:
- Система Gofer ( Hugs ) пользователя Haskell - это интерпретатор байт-кода . Когда-то это была одна из наиболее широко используемых реализаций, наряду с компилятором GHC [49], но теперь она в основном заменена GHCi. Он также поставляется с графической библиотекой.
- HBC - это ранняя реализация, поддерживающая Haskell 1.4. Он был реализован Леннартом Аугустссоном в Lazy ML и основан на нем . Некоторое время он активно не развивался.
- nhc98 - это компилятор байт-кода, ориентированный на минимизацию использования памяти.
- Компилятор York Haskell ( Yhc ) был ответвлением nhc98 с целью сделать его более простым, портативным и эффективным, а также интегрировать поддержку Hat, трассировщика Haskell. Он также имел бэкэнд JavaScript , позволяющий пользователям запускать программы Haskell в веб-браузерах .
Реализации, не полностью совместимые с Haskell 98 и использующие вариант языка Haskell, включают:
- Eta и Frege - диалекты Haskell, ориентированные на виртуальную машину Java .
- Gofer был образовательным диалектом Haskell с функцией, называемой конструкторскими классами , разработанной Марком Джонсом. Его вытеснила Hugs (система Gofer пользователя Haskell).
- Гелий, новый диалект Haskell. Основное внимание уделяется упрощению обучения за счет более четких сообщений об ошибках. В настоящее время в нем отсутствует полная поддержка классов типов, что делает его несовместимым со многими программами на Haskell.
Известные приложения [ править ]
- Cabal - это инструмент для создания и упаковки библиотек и программ Haskell. [50]
- Darcs - это система контроля версий, написанная на Haskell, с несколькими инновационными функциями, такими как более точный контроль над применяемыми исправлениями.
- GHC также часто является испытательным стендом для расширенных функций функционального программирования и оптимизаций на других языках программирования.
- Git-application - это инструмент для управления (большими) файлами данных в системе контроля версий Git . Он также предоставляет распределенную систему синхронизации файлов (помощник git-application).
- Linspire GNU / Linux выбрала Haskell для разработки системных инструментов. [51]
- Pandoc - это инструмент для преобразования одного формата разметки в другой.
- Мопсы являются компилятором и интерпретатором для Раки языка программирования (ранее Perl 6).
- Xmonad - оконный менеджер для X Window System , полностью написанный на Haskell. [52]
Промышленность [ править ]
- Bluespec SystemVerilog (BSV) - это язык для проектирования полупроводников, являющийся расширением Haskell. Кроме того, инструменты Bluespec, Inc. реализованы в Haskell.
- Cryptol , язык и набор инструментов для разработки и проверки алгоритмов криптографии , реализован в Haskell.
- Facebook реализует свои программы защиты от спама [53] на Haskell, поддерживая базовую библиотеку доступа к данным как программное обеспечение с открытым исходным кодом . [54]
- GitHub реализовал Semantic , библиотеку с открытым исходным кодом для анализа, сравнения и интерпретации ненадежного исходного кода в Haskell. [55]
- ВЫБ4 , первый официально подтверждено микроядра , [56] используется Haskell как язык прототипирования для разработчика ОС. [56] : p.2 В то же время код Haskell определил исполняемую спецификацию, с помощью которой можно было бы рассуждать, для автоматического перевода с помощью инструмента доказательства теорем. [56] : стр.3 Таким образом, код Haskell служил промежуточным прототипом перед окончательной доработкой C. [56] : стр.3
Интернет [ править ]
Известные веб-фреймворки, написанные для Haskell, включают: [57]
- Щелчок
- Йесод
Критика [ править ]
Ян-Виллем Мессен в 2002 г. и Саймон Пейтон Джонс в 2003 г. обсуждали проблемы, связанные с ленивым оцениванием, а также признавали теоретические мотивы этого. [58] [59] В дополнение к чисто практическим соображениям, таким как повышение производительности, [60] они отмечают, что, помимо добавления некоторых накладных расходов на производительность, ленивое вычисление затрудняет программистам оценку производительности своего кода (особенно использование его пространства).
Бастиан Херен, Даан Лейен и Арьян ван Эйзендорн в 2003 году также заметили некоторые препятствия для изучающих Haskell: «Тонкий синтаксис и сложная система типов Haskell - палка о двух концах, которую высоко ценят опытные программисты, но также вызывают разочарование у новичков. , поскольку универсальность Haskell часто приводит к появлению загадочных сообщений об ошибках ". [61] Для решения этих проблем исследователи из Утрехтского университета разработали продвинутый интерпретатор под названием Helium , который повысил удобство использования сообщений об ошибках, ограничив универсальность некоторых функций Haskell и, в частности, исключив поддержку классов типов .
Бен Липпмайер разработал Disciple [62] как диалект Haskell со строгим по умолчанию (ленивым путем явной аннотации) диалектом Haskell с системой типов и эффектов, чтобы устранить трудности Haskell в рассуждениях о ленивых вычислениях и использовании традиционных структур данных, таких как изменяемые массивы. [63] Он утверждает (стр. 20), что «деструктивное обновление предоставляет программисту два важных и мощных инструмента ... набор эффективных структур данных, подобных массиву, для управления коллекциями объектов, и ... возможность широковещательной рассылки новое значение для всех частей программы с минимальной нагрузкой на программиста ».
Роберт Харпер , один из авторов Standard ML , привел причины отказа от использования Haskell для обучения вводному программированию. Среди них - сложность рассуждений об использовании ресурсов с нестрогой оценкой, эта ленивая оценка усложняет определение типов данных и индуктивные рассуждения [64] и «неполноценность» (старой) системы классов Haskell по сравнению с модульной системой ML. [65]
Инструмент сборки Haskell, Cabal , исторически подвергался критике за плохую обработку нескольких версий одной и той же библиотеки - проблему, известную как «ад Кабала». Сервер стека и инструмент сборки стека были созданы в ответ на эту критику. [66] Сам Cabal теперь имеет гораздо более сложную систему сборки, в значительной степени вдохновленную Nix , [67] которая стала стандартной в версии 3.0.
Связанные языки [ править ]
Clean - близкий, немного более старый родственник Haskell. Его самое большое отклонение от Haskell заключается в использовании типов уникальности вместо монад для ввода-вывода и побочных эффектов.
Был разработан ряд языков, вдохновленных Haskell, но с разными системами типов, в том числе:
- Agda , функциональный язык с зависимыми типами .
- Cayenne , с зависимыми типами .
- Elm , функциональный язык для создания интерфейсных веб-приложений, без поддержки высокоуровневых типов.
- Эпиграмма , функциональный язык с зависимыми типами, пригодный для доказательства свойств программ.
- Idris , функциональный язык общего назначения с зависимыми типами , разработанный в Университете Сент-Эндрюс .
- PureScript компилируется в JavaScript.
- Ωmega , строгий и многое другое.
Другие родственные языки включают:
- Curry , функциональный / логический язык программирования, основанный на Haskell.
Известные варианты Haskell включают:
- Generic Haskell , версия Haskell с поддержкой системы типов для общего программирования .
- Hume , строгий функциональный язык для встраиваемых систем, основанный на процессах в виде автоматов без сохранения состояния над своего рода кортежами одноэлементных каналов почтовых ящиков, где состояние сохраняется посредством обратной связи с почтовыми ящиками и описания сопоставления выходов с каналами в виде разводки ящиков, с Haskell-подобный язык выражений и синтаксис.
Конференции и семинары [ править ]
Сообщество Haskell регулярно встречается для проведения исследований и разработок. Основные события:
- Международная конференция по функциональному программированию (ICFP)
- Симпозиум Haskell (ранее - Мастерская Haskell)
- Семинар разработчиков Haskell
- Коммерческие пользователи функционального программирования (CUFP)
С 2006 года прошла серия организованных хакатонов , серия Hac, направленных на улучшение инструментов и библиотек языков программирования. [68]
Ссылки [ править ]
- ^ a b c Худак и др. 2007 .
- ^ a b Марлоу, Саймон (24 ноября 2009 г.). «Анонс Haskell 2010» . Haskell (список рассылки) . Проверено 12 марта 2011 года .
- ^ a b Ридель, Герберт (28 апреля 2016 г.). «ИНН: сформирован комитет по Haskell Prime 2020» . Haskell-prime (список рассылки) . Дата обращения 6 мая 2017 .
- ^ Б с д е е г ч я J к л м Пейтон Джонс 2003 , стр. xi
- ^ Норелл, Ульф (2008). «Зависимо типизированное программирование в Agda» (PDF) . Гётеборг: Университет Чалмерса . Проверено 9 февраля 2012 года .
- ^ Худак и др. 2007 , с. 12–38, 43.
- ^ Страуструп, Бьярн ; Саттон, Эндрю (2011). «Дизайн концептуальных библиотек для C ++» (PDF) . Архивировано из оригинального (PDF) 10 февраля 2012 года. Цитировать журнал требует
|journal=
( помощь ) - ^ Б с д е е г ч я J Гудак и др. 2007 , стр. 12-45–46.
- ^ a b Мейер, Эрик (2006). «Признания продавца используемых языков программирования: привлечение масс к Haskell». Упсла 2007 . CiteSeerX 10.1.1.72.868 .
- ^ Мейера, Erik (1 октября 2009). «Лекции C9: доктор Эрик Мейер - основы функционального программирования, глава 1 из 13» . Канал 9 . Microsoft . Проверено 9 февраля 2012 года .
- ^ Drobi, Садек (4 марта 2009). «Эрик Мейер в LINQ» . InfoQ . QCon SF 2008: C4Media Inc . Проверено 9 февраля 2012 года .CS1 maint: location ( ссылка )
- ^ Хикки, Рич. "Книжная полка Clojure" . Listmania! . Архивировано из оригинала 3 октября 2017 года . Проверено 3 октября 2017 года .
- ^ Хеллер, Мартин (18 октября 2011 г.). «Поднимите нос на Дарта и понюхайте CoffeeScript» . InfoWorld . Проверено 15 июля 2020 .
- ^ "Декларативное программирование в Эшере" (PDF) . Проверено 7 октября 2015 года .
- ^ Сайм, Дон ; Гранич, Адам; Чистернино, Антонио (2007). Эксперт F # . Апресс . п. 2.
F # также опирается на Haskell, особенно в отношении двух расширенных языковых функций, называемых
последовательными выражениями
и
рабочими процессами
.
- ^ Wechsung, Инго. "Язык программирования Фреге" (PDF) . Проверено 26 февраля 2014 года .
- ^ «Facebook представляет 'Hack', язык программирования будущего» . ПРОВОДНОЙ . 20 марта 2014 г.
- ^ «Идрис, язык с зависимой типизацией» . Проверено 26 октября 2014 года .
- ^ «LiveScript Вдохновение» . Проверено 4 февраля 2014 года .
- ^ Фриман, Фил (2016). «PureScript на примере» . Leanpub . Проверено 23 апреля 2017 года .
- ^ Kuchling, AM "Функциональное программирование HOWTO" . Документация по Python v2.7.2 . Фонд программного обеспечения Python . Проверено 9 февраля 2012 года .
- ^ «Словарь терминов и жаргонизмов» . Фонд Perl Perl 6 Wiki . Фонд Perl . Архивировано из оригинального 21 января 2012 года . Проверено 9 февраля 2012 года .
- ^ "Ссылка на Rust: Приложение: Влияния" . Проверено 3 февраля +2016 .
- ^ Fogus, Майкл (6 августа 2010). «МартинОдерский возьми (5) в список» . Отправьте больше медработников . Проверено 9 февраля 2012 года .
- ^ Lattner, Крис (3 июня 2014). "Домашняя страница Криса Латтнера" . Крис Латтнер . Дата обращения 3 июня 2014 .
Язык Swift является продуктом неустанных усилий команды языковых экспертов, гуру документации, ниндзя по оптимизации компиляторов и невероятно важной внутренней группы, которая предоставила отзывы, чтобы помочь усовершенствовать и опробовать идеи в боевых условиях.
Конечно, он также очень выиграл от опыта, с трудом завоеванного многими другими языками в этой области, черпая идеи из Objective-C, Rust, Haskell, Ruby, Python, C #, CLU и слишком многих других, чтобы перечислить.
- ^ "Древесина / История" . Проверено 7 октября 2015 года .
- ↑ Шевалье, Тим (28 января 2008 г.). "кто-нибудь может сказать мне произношение" haskell "?" . Haskell-cafe (Список рассылки) . Проверено 12 марта 2011 года .
- ^ Вывод типа первоначально с использованием вывода типа Хиндли-Милнера
- ^ a b c Пейтон Джонс 2003 .
- ^ Эдвард Кметт, Эдвард Кметт - Типовые классы против мира
- ^ Моссберг, Erik (8 июня 2020), erkmos / Haskell-компании , получены 22 июня 2020
- ^ О'Салливан, Брайан; Герцен, Джон; Стюарт, Дональд Брюс (15 ноября 2008 г.). Haskell из реального мира: код, в который можно верить . "O'Reilly Media, Inc.". стр. xxviii – xxxi. ISBN 978-0-596-55430-9.
- ^ "Индекс популярности языка программирования PYPL" . pypl.github.io . 22 января 2021. Архивировано из оригинала 17 сентября 2020 года . Проверено 22 января 2021 года .
- ^ Фредериксон, Бен. «Рейтинг языков программирования пользователями GitHub» . www.benfrederickson.com . Проверено 6 сентября 2019 .
- ^ a b c Пейтон Джонс 2003 , Предисловие.
- ^ «Классы типов, впервые предложенные во время разработки языка программирования Haskell, ...» - Джон Гарретт Моррис (2013), «Классы типов и цепочки экземпляров: реляционный подход»
- ^ Wadler, Филипп (октябрь 1988). «Как сделать специальный полиморфизм менее случайным» .
- ^ «Haskell Wiki: реализации» . Проверено 18 декабря 2012 года .
- ^ "Добро пожаловать на Haskell ' " . Вики-сайт Haskell .
- ^ Wadler, P .; Блотт, С. (1989). «Как сделать специальный полиморфизм менее случайным». Материалы 16-го симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования . ACM : 60–76. DOI : 10.1145 / 75277.75283 . ISBN 978-0-89791-294-5. S2CID 15327197 .
- ^ Холлгрен, T. (январь 2001). «Развлечение с функциональными зависимостями или типами как значениями в статических вычислениях в Haskell» . Труды совместной зимней встречи CS / CE . Варберг, Швеция.
- ^ Игра "Тесты компьютерного языка"
- ^ "Статистика HackageDB" . Hackage.haskell.org. Архивировано из оригинала 3 мая 2013 года . Проверено 26 июня 2013 года .
- ^ "Реализации" в Haskell Wiki
- ^ "Бэкэнд LLVM" . GHC Trac .
- ^ Терей, Дэвид А .; Чакраварти, Мануэль MT (2010). "Бэкэнд LLVM для GHC" . Материалы симпозиума ACM SIGPLAN Haskell 2010 . ACM Press.
- ^ С. Райдер и С. Томпсон (2005). «Перенос HaRe на GHC API»
- ^ Утрехтский компилятор Haskell
- ^ Худак и др. 2007 , стр. 12–22.
- ^ "The Haskell Cabal" . Проверено 8 апреля 2015 года .
- ^ "Linspire / Freespire Core OS Team и Haskell" . Список рассылки Debian Haskell . Май 2006 г.
- ^ xmonad.org
- ^ «Борьба со спамом с помощью Haskell» . Код Facebook . 26 июня 2015 . Проверено 11 августа 2019 .
- ^ "Открытый исходный код Haxl, библиотеки для Haskell" . Код Facebook . 10 июня 2014 . Проверено 11 августа 2019 .
- ^ Разбор, анализ и сравнение исходного кода на многих языках: github / semantic , GitHub, 7 июня 2019 г. , получено 7 июня 2019 г.
- ^ a b c d Формальное доказательство функциональной корректности было завершено в 2009 году. Klein, Gerwin; Эльфинстон, Кевин; Хайзер, Гернот ; Андроник, июнь; Петух, Дэвид; Деррин, Филип; Элькадуве, Дхаммика; Энгельгардт, Кай; Колански, Рафаль; Норриш, Майкл; Сьюэлл, Томас; Туч, Харви; Уинвуд, Саймон (октябрь 2009 г.). «seL4: Формальная проверка ядра ОС» (PDF) . 22-й симпозиум ACM по принципам операционных систем . Биг Скай, штат Монтана, США.
- ^ "Веб / Frameworks - HaskellWiki" . wiki.haskell.org . Проверено 11 августа 2019 .
- ^ Ян-Виллем Мессен. Стремительный Haskell: выполнение с ограниченными ресурсами обеспечивает эффективную итерацию . Трудысеминара SIGPLAN Ассоциации вычислительной техники (ACM)2002 годапо Haskell.
- ^ Саймон Пейтон Джонс. В волосяной рубашке: ретроспектива на Haskell . Приглашенный доклад на POPL 2003.
- ^ «Ленивая оценка может привести к отличной производительности, например, в игре The Computer Language Benchmarks Game» .
- ^ Heeren, Bastiaan; Лейен, Даан; ван Эйзендорн, Арьян (2003). «Гелий для изучения Haskell» (PDF) . Труды семинара ACM SIGPLAN 2003 по Haskell : 62–71. DOI : 10.1145 / 871895.871902 . ISBN 1581137583. S2CID 11986908 .
- ^ "DDC - HaskellWiki" . Haskell.org. 3 декабря 2010 . Проверено 26 июня 2013 года .
- ^ Бен Липпмайер, Вывод типов и оптимизация для нечистого мира , Австралийский национальный университет (2010), докторская диссертация, глава 1
- ^ Роберт Харпер. «Дело лени» .
- ^ Роберт Харпер. «Модули имеют наибольшее значение» .
- ^ "Решение ада Кабала" . www.yesodweb.com . Проверено 11 августа 2019 .
- ^ "Объявление о новой сборке Кабала: локальные сборки в стиле Nix" . Проверено 1 октября 2019 года .
- ^ "Хакатон - HaskellWiki" .
Дальнейшее чтение [ править ]
- Отчеты
- Пейтон Джонс, Саймон , изд. (2003). Haskell 98 Language and Libraries: The Revised Report . Издательство Кембриджского университета. ISBN 978-0521826143.
- Марлоу, Саймон , изд. (2010). Отчет о языке Haskell 2010 (PDF) . Haskell.org.
- Учебники
- Дэви, Энтони (1992). Введение в системы функционального программирования с использованием Haskell . Издательство Кембриджского университета. ISBN 978-0-521-25830-2.
- Птица, Ричард (1998). Введение в функциональное программирование с использованием Haskell (2-е изд.). Пресса Прентис Холл. ISBN 978-0-13-484346-9.
- Худак, Пол (2000). Школа выражения Haskell: изучение функционального программирования с помощью мультимедиа . Нью-Йорк: Издательство Кембриджского университета. ISBN 978-0521643382.
- Хаттон, Грэм (2007). Программирование на Haskell . Издательство Кембриджского университета. ISBN 978-0521692694.
- О'Салливан, Брайан ; Стюарт, Дон ; Герцен, Джон (2008). Реальный мир Haskell . Севастополь: О'Рейли. ISBN 978-0-596-51498-3 ( полный текст )CS1 maint: postscript (link)
- Томпсон, Саймон (2011). Haskell: Искусство функционального программирования (3-е изд.). Эддисон-Уэсли. ISBN 978-0201882957.
- Липовача, Миран (апрель 2011 г.). Выучите Haskell на благо! . Сан-Франциско: Пресса без крахмала. ISBN 978-1-59327-283-8.( полный текст )
- Птица, Ричард (2014). Функциональное мышление с помощью Haskell . Издательство Кембриджского университета. ISBN 978-1-107-45264-0.
- Учебники
- Худак, Пол; Петерсон, Джон; Фазель, Джозеф (июнь 2000 г.). «Нежное введение в Haskell, версия 98» . Haskell.org .
- Еще одно руководство по Haskell от Хала Доме III; предполагает гораздо меньше предварительных знаний, чем официальное руководство
- Йоргей, Брент (12 марта 2009 г.). "Типеклассопедия" (PDF) . Монада. Чтение (13): 17–68.
- Магуайр, Сэнди (2018). Мышление с помощью типов: программирование на уровне типов в Haskell .
- История
- Худак, Пол ; Хьюз, Джон ; Пейтон Джонс, Саймон ; Уодлер, Филипп (2007). «История Haskell: лень с классом» (PDF) . Материалы третьей конференции ACM SIGPLAN по истории языков программирования (HOPL III) : 12–1–55. DOI : 10.1145 / 1238844.1238856 . ISBN 978-1-59593-766-7. S2CID 52847907 .
- Гамильтон, Наоми (19 сентября 2008 г.). «Азия языков программирования: Haskell» . Компьютерный мир .
Внешние ссылки [ править ]
В Викиучебнике есть книга по теме: Haskell |
В Викиучебнике есть книга на тему: « Напишите себе схему за 48 часов». |
- Официальный веб-сайт
- Официальная вики