Jump to content

Хаскелл

Хаскелл
Логотип Хаскелла
Парадигма Чисто функциональный
Разработано Леннарт Аугустссон , Дэйв Бартон, Брайан Бутел, Уоррен Бертон, Джозеф Фазель, Кевин Хаммонд, Ральф Хинце, Пол Худак, Джон Хьюз , Томас Джонссон, Марк Джонс, Саймон Пейтон Джонс , Джон Лаунбери , Эрик Мейер , Джон Петерсон, Аластер Рид, Колин Рансимен, Филип Уодлер
Впервые появился 1990 год ; 34 года назад ( 1990 ) [1]
Стабильная версия
Хаскелл 2010 [2] / июль 2010 г .; 13 лет назад ( 2010-07 )
Предварительный выпуск
Анонсирован Haskell 2020 [3]
Дисциплина набора текста Предполагаемый , статичный , сильный
ТЫ Кросс-платформенный
Расширения имен файлов .hs, .lhs
Веб-сайт хаскелл .org
Основные реализации
GHC , Обнимаю , NHC, JHC, Yhc , UHC
Диалекты
Гофер
Под влиянием
Чистый , [4] ФП , [4] Суслик , [4] Надежда и надежда + , [4] Идентификатор , [4] ИСВИМ , [4] КРЦ , [4] Лисп , [4]
Миранда , [4] ML и стандартный ML , [4] Оруэлл , SASL , [4] Схема , [4] СИЗАЛЬ [4]
Под влиянием
Приглашать , [5] Блюспек , [6] C++11 / Концепции , [7]
С# / ЛИНК , [8] [9] [10] [11] КАЛ, [ нужна ссылка ] Кайенна , [8] Чистый , [8] Клююр , [12]
КофеСкрипт , [13] Карри , [8] Вяз ,
Эпиграмма , [ нужна ссылка ] Эшер , [14] Ф# , [15] Хак , [16] Идрис , [17]
Изабель , [8] Java / дженерики , [8] LiveScript , [18]
Меркурий , [8] Оммега , PureScript , [19] Питон , [8] [20] Раку , [21]
Ржавчина , [22] Скала , [8] [23] Быстрый , [24]
Визуал Бейсик 9.0 [8] [9]

Haskell ( / ˈ h æ s k əl / [25] ) — общего назначения статически типизированный язык чисто функциональный программирования с выводом типа и ленивым вычислением . [26] [27] Созданный для обучения, исследований и промышленного применения, Haskell впервые ввел ряд функций языка программирования, таких как классы типов , которые обеспечивают типобезопасную перегрузку операторов , и монадический ввод/вывод (IO). Он назван в честь логика Хаскелла Карри . [1] Основной реализацией Haskell является компилятор Glasgow Haskell (GHC).

Haskell Семантика исторически основана на семантике языка программирования Miranda , который служил для сосредоточения усилий первоначальной рабочей группы Haskell. [28] Последняя официальная спецификация языка была сделана в июле 2010 года, в то время как разработка GHC продолжает расширять Haskell за счет языковых расширений.

Haskell используется в научных кругах и промышленности. [29] [30] [31] По состоянию на май 2021 г. , Haskell занял 28-е место по популярности языка программирования по результатам поиска учебных пособий в Google. [32] и составлял менее 1% активных пользователей в репозитории исходного кода GitHub . [33]

История [ править ]

После выпуска Miranda компанией Research Software Ltd. в 1985 году интерес к ленивым функциональным языкам вырос. К 1987 году существовало более дюжины нестрогих , чисто функциональных языков программирования. Miranda использовалась наиболее широко, но это было проприетарное программное обеспечение . На конференции по функциональным языкам программирования и компьютерной архитектуре (FPCA '87) в Портленде, штат Орегон , было достигнуто твердое согласие о создании комитета для определения открытого стандарта для таких языков. Целью комитета было объединить существующие функциональные языки в один, который послужит основой для будущих исследований в области проектирования функциональных языков. [34]

Haskell 1.0–1.4 [ править ]

Haskell был разработан комитетом, пытавшимся по возможности объединить готовые решения.

Классы типов , которые обеспечивают типобезопасную перегрузку операторов , были впервые предложены Филипом Уодлером и Стивеном Блоттом для решения специальной обработки типов равенства и арифметической перегрузки в языках того времени. [35]

В ранних версиях Haskell, вплоть до версии 1.2, взаимодействие с пользователем и ввод-вывод (ввод и вывод) обрабатывались как механизмами, основанными на потоках, так и механизмами продолжения, которые многие считали неудовлетворительными. [36] В версии 1.3 был представлен монадический ввод-вывод, а также обобщение классов типов до более высоких видов (конструкторов типов). Наряду с «нотацией do», которая обеспечивает синтаксический сахар для класса типов Monad, это дало Haskell систему эффектов, которая поддерживала ссылочную прозрачность и была удобна.

Другими заметными изменениями в ранних версиях были подход к функции seq, которая создает зависимость данных между значениями и используется в ленивых языках, чтобы избежать чрезмерного потребления памяти; при этом он переходит от класса типа к стандартной функции, чтобы сделать рефакторинг более практичным.

Первая версия Haskell («Haskell 1.0») была определена в 1990 году. [1] Усилия комитета привели к появлению ряда определений языка (1.0, 1.1, 1.2, 1.3, 1.4).

Иерархия классов типов в прелюдии Haskell начиная с GHC 7.10. Включение Foldable и Traversable (с соответствующими изменениями в сигнатурах типов некоторых функций) и Applicative в качестве промежуточного звена между Functor и Monad является отклонением от стандарта Haskell 2010.

Хаскель 98 [ править ]

В конце 1997 года кульминацией этой серии стал Haskell 98 , призванный определить стабильную, минимальную, переносимую версию языка и сопутствующую стандартную библиотеку для обучения, а также в качестве основы для будущих расширений. Комитет категорически приветствовал создание расширений и вариантов Haskell 98 посредством добавления и включения экспериментальных функций. [34]

В феврале 1999 года стандарт языка Haskell 98 был первоначально опубликован как The Haskell 98 Report . [34] В январе 2003 года исправленная версия была опубликована как Haskell 98 Language and Libraries: The Revised Report . [27] Язык продолжает быстро развиваться: реализация компилятора Glasgow Haskell (GHC) представляет собой текущий стандарт де-факто . [37]

Хаскелл 2010 [ править ]

В начале 2006 года начался процесс определения преемника стандарта Haskell 98, неофициально названного Haskell Prime . [38] Предполагалось, что это будет непрерывный постепенный процесс пересмотра определения языка, включающий новую редакцию не чаще одного раза в год. Первая редакция под названием 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-нотации и if-then-else было изменено для устранения непредвиденных синтаксических ошибок.
  • The LANGUAGE прагма была указана . К 2010 году широко использовались десятки расширений языка, и GHC (среди других компиляторов) предоставил LANGUAGE прагма для указания отдельных расширений со списком идентификаторов. Компиляторы Haskell 2010 должны поддерживать Haskell2010 Расширение и рекомендуется поддерживать несколько других, которые соответствуют расширениям, добавленным в Haskell 2010.

Будущие стандарты

Следующая официальная спецификация была запланирована на 2020 год. [3] 29 октября 2021 года в версии GHC 9.2.1 было выпущено расширение GHC2021. Хотя это не формальная спецификация языка, она объединяет ряд стабильных и широко используемых расширений GHC для Haskell 2010. [39] [40]

Особенности [ править ]

В Haskell реализованы ленивые вычисления , лямбда-выражения , сопоставление с образцом , понимание списков , классы типов и полиморфизм типов . Это чисто функциональный язык , что означает, что функции обычно не имеют побочных эффектов . Существует отдельная конструкция для представления побочных эффектов, ортогональная типу функции. Чистая функция может возвращать побочный эффект, который впоследствии выполняется, моделируя нечистые функции других языков.

Haskell имеет строгую статическую систему типов , основанную на выведении типа Хиндли-Милнера . Его основным нововведением в этой области являются классы типов, изначально задуманные как принципиальный способ добавления перегрузки в язык. [41] но с тех пор нашел гораздо больше применений. [42]

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

Haskell имеет открытую опубликованную спецификацию. [27] и существует множество реализаций . Его основная реализация, компилятор Glasgow Haskell (GHC), является одновременно интерпретатором и собственного кода компилятором , который работает на большинстве платформ. GHC известен своей богатой системой типов, включающей последние инновации, такие как обобщенные алгебраические типы данных и семейства типов. Игра Computer Language Benchmarks Game также подчеркивает высокопроизводительную реализацию параллелизма и параллелизма . [43]

доступно более 5400 сторонних библиотек и инструментов с открытым исходным кодом Вокруг языка существует активное, растущее сообщество, и в онлайн-репозитории пакетов Hackage . [44]

Примеры кода [ править ]

« Привет, мир!» программа на Haskell (строго обязательна только последняя строка):

module Main (main) where          -- not needed in interpreter, is the default in a module file

main :: IO ()                     -- the compiler can infer this type definition
main = putStrLn "Hello, World!"

Функция факториал в Haskell определяется несколькими разными способами (первая строка — это аннотация типа , которая не является обязательной и одинаковой для каждой реализации):

factorial :: (Integral a) => a -> a

-- Using recursion (with the "ifthenelse" expression)
factorial n = if n < 2
              then 1
              else n * factorial (n - 1)

-- Using recursion (with pattern matching)
factorial 0 = 1
factorial n = n * factorial (n - 1)

-- Using recursion (with guards)
factorial n
   | n < 2     = 1
   | otherwise = n * factorial (n - 1)

-- Using a list and the "product" function
factorial n = product [1..n]

-- Using fold (implements "product")
factorial n = foldl (*) 1 [1..n]

-- Point-free style
factorial = foldr (*) 1 . enumFromTo 1

Haskell Использование комбинатора с фиксированной точкой позволяет написать эту функцию без какой-либо явной рекурсии.

import Data.Function (fix)

factorial = fix fac
  where fac f x 
          | x < 2     = 1
          | otherwise = x * f (x - 1)


Поскольку тип Integer имеет произвольную точность , этот код будет вычислять такие значения, как factorial 100000 (число из 456 574 цифр) без потери точности.

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

-- Type annotation (optional, same for each implementation)
quickSort :: Ord a => [a] -> [a]

-- Using list comprehensions
quickSort []     = []                               -- The empty list is already sorted
quickSort (x:xs) = quickSort [a | a <- xs, a < x]   -- Sort the left part of the list
                   ++ [x] ++                        -- Insert pivot between two sorted parts
                   quickSort [a | a <- xs, a >= x]  -- Sort the right part of the list

-- Using filter
quickSort []     = []
quickSort (x:xs) = quickSort (filter (<x) xs)
                   ++ [x] ++
                   quickSort (filter (>=x) xs)

Реализации [ править ]

Все перечисленные реализации распространяются по лицензиям с открытым исходным кодом . [45]

Реализации, которые полностью или почти соответствуют стандарту Haskell 98, включают:

  • Компилятор Glasgow Haskell (GHC) компилируется в собственный код на многих различных процессорных архитектурах и в ANSI C через один из двух промежуточных языков : C-- или, в более поздних версиях, биткод LLVM (ранее — виртуальная машина низкого уровня). [46] [47] GHC стал де-факто стандартным диалектом Haskell. [48] Существуют библиотеки (например, привязки к OpenGL ), которые работают только с GHC. GHC также распространялся вместе с платформой Haskell .
  • Jhc, компилятор Haskell, написанный Джоном Мичемом, уделяет особое внимание скорости и эффективности создаваемых программ и изучению новых преобразований программ.
    • Ajhc — это форк Jhc.
  • Утрехтский компилятор Haskell (UHC) — это реализация Haskell, разработанная Утрехтским университетом . [49] Он поддерживает почти все функции Haskell 98, а также множество экспериментальных расширений. Он реализован с использованием грамматик атрибутов и в основном используется для исследования систем сгенерированных типов и расширений языка.

Реализации, которые больше не поддерживаются активно, включают:

  • Система Gofer пользователя Haskell ( Hugs ) — интерпретатор байт-кода . Когда-то это была одна из наиболее широко используемых реализаций наряду с компилятором GHC. [50] но сейчас его в основном заменил GHCI. Он также поставляется с графической библиотекой.
  • HBC — ранняя реализация, поддерживающая Haskell 1.4. Он был реализован Леннартом Аугустссоном в Lazy ML и на его основе . Некоторое время он активно не развивался.
  • nhc98 — это компилятор байт-кода, ориентированный на минимизацию использования памяти.
    • Компилятор York Haskell ( Yhc ) был ответвлением nhc98, целью которого было сделать его более простым, портативным и эффективным, а также интегрировать поддержку Hat, трассировщика Haskell. Он также имел серверную часть JavaScript , позволяющую пользователям запускать программы Haskell в веб-браузерах .

Реализации, не полностью совместимые с Haskell 98 и использующие вариант языка Haskell, включают:

  • Эта и Фреге — это диалекты Haskell, предназначенные для виртуальной машины Java .
  • Gofer — это образовательный диалект Haskell с функцией, называемой классами-конструкторами , разработанный Марком Джонсом. Она заменена системой Gofer пользователя Haskell (Hugs).
  • Helium, новый диалект Haskell. Основное внимание уделяется упрощению обучения за счет более четких сообщений об ошибках за счет отключения классов типов по умолчанию.

Известные приложения [ править ]

  • Помощник по доказательству Agda написан на Haskell. [51]
  • Cabal — это инструмент для создания и упаковки библиотек и программ Haskell. [52]
  • Darcs — это система контроля версий, написанная на Haskell, с несколькими инновационными функциями, такими как более точный контроль над применяемыми исправлениями.
  • GHC также часто является испытательным стендом для расширенных функций функционального программирования и оптимизации на других языках программирования.
  • Git-annex — это инструмент для управления (большими) файлами данных под контролем версий Git . Он также предоставляет распределенную систему синхронизации файлов (помощник git-annex).
  • Linspire Linux выбрала Haskell для разработки системных инструментов. [53]
  • Pandoc — это инструмент для преобразования одного формата разметки в другой.
  • Pugs — это компилятор и интерпретатор языка Raku программирования (ранее Perl 6).
  • TidalCycles — это специальный язык для живого кодирования музыкальных шаблонов, встроенный в Haskell. [54]
  • Xmonad оконный менеджер для X Window System , полностью написанный на Haskell. [55]
  • ГарганТекст [56] это инструмент для совместной работы для отображения текстов семантического анализа в любом веб-браузере , полностью написанный на Haskell и PureScript , который используется, например, в исследовательском сообществе для составления современных отчетов и дорожных карт. [57]

Промышленность [ править ]

Интернет [ править ]

Известные веб-фреймворки, написанные для Haskell, включают: [66]

Критика [ править ]

Ян-Виллем Массен в 2002 году и Саймон Пейтон Джонс в 2003 году обсудили проблемы, связанные с ленивым вычислением, а также признали теоретические мотивы этого явления. [67] [68] Помимо чисто практических соображений, таких как повышение производительности, [69] они отмечают, что ленивые вычисления затрудняют программистам оценку производительности своего кода (особенно его использования пространства).

Бастиан Херен, Даан Лейен и Арьян ван Айзендорн в 2003 году также заметили некоторые камни преткновения для изучающих Haskell: «Тонкий синтаксис и сложная система типов Haskell — это палка о двух концах, которую высоко ценят опытные программисты, но также и источник разочарования среди новичков». , поскольку универсальность Haskell часто приводит к загадочным сообщениям об ошибках». [70] Для устранения сообщений об ошибках исследователи из Утрехтского университета разработали усовершенствованный интерпретатор под названием Helium , который повысил удобство использования сообщений об ошибках за счет ограничения общности некоторых функций Haskell. В частности, он по умолчанию отключает классы типов. [71]

Бен Липпмайер разработал Disciple [72] как строгий по умолчанию (ленивый посредством явных аннотаций) диалект Haskell с системой типов и эффектов, чтобы решить трудности Haskell в рассуждениях о ленивых вычислениях и использовании традиционных структур данных, таких как изменяемые массивы. [73] Он утверждает (стр. 20), что «деструктивное обновление предоставляет программисту два важных и мощных инструмента… набор эффективных структур данных, подобных массивам, для управления коллекциями объектов и… возможность транслировать новое значение в все части программы с минимальной нагрузкой на программиста».

Роберт Харпер , один из авторов Standard ML, объяснил причины, по которым он не использует Haskell для обучения вводному программированию. Среди них сложность рассуждений об использовании ресурсов с помощью нестрогих оценок, ленивые вычисления усложняют определение типов данных и индуктивные рассуждения. [74] и «неполноценность» (старой) системы классов Haskell по сравнению с системой модулей ML. [75]

Инструмент сборки Haskell, Cabal , исторически подвергался критике за плохую обработку нескольких версий одной и той же библиотеки, проблему, известную как «Кабаловый ад». Сервер Stackage и инструмент сборки Stack были созданы в ответ на эту критику. [76] Сам Cabal теперь имеет гораздо более сложную систему сборки, во многом вдохновленную Nix . [77] который стал значением по умолчанию в версии 3.0.

Родственные языки [ править ]

Clean — близкий, немного более старый родственник Haskell. Его самое большое отклонение от Haskell заключается в использовании типов уникальности вместо монад для ввода-вывода и побочных эффектов.

Был разработан ряд языков, вдохновленных Haskell, но с разными системами типов, в том числе:

Другие родственные языки включают:

  • Curry — язык функционального/логического программирования, основанный на Haskell.

Известные варианты Haskell включают:

  • Generic Haskell — версия Haskell с поддержкой системы типов для универсального программирования .
  • Hume — строгий функциональный язык для встраиваемых систем , основанный на процессах в виде автоматов без сохранения состояния в своего рода кортежах одноэлементных каналов почтовых ящиков, где состояние сохраняется посредством обратной связи с почтовыми ящиками, а описание отображения выходов на каналы — в виде коробочной проводки, с Haskell-подобный язык выражений и синтаксис.

Конференции и семинары [ править ]

Сообщество Haskell регулярно встречается для проведения исследований и разработок. Основные события:

Начиная с 2006 года проводится серия организованных хакатонов серии Hac, направленных на улучшение инструментов и библиотек языков программирования. [79]

Ссылки [ править ]

  1. ^ Jump up to: Перейти обратно: а б с Худак и др. 2007 .
  2. ^ Jump up to: Перейти обратно: а б Марлоу, Саймон (24 ноября 2009 г.). «Анонс Haskell 2010» . Haskell (список рассылки) . Проверено 12 марта 2011 г.
  3. ^ Jump up to: Перейти обратно: а б Ридель, Герберт (28 апреля 2016 г.). «ANN: Сформирован комитет Haskell Prime 2020» . Haskell-prime (список рассылки) . Проверено 6 мая 2017 г.
  4. ^ Jump up to: Перейти обратно: а б с д и ж г час я дж к л м Пейтон Джонс 2003 , с. xi
  5. ^ Норелл, Ульф (2008). «Зависимо типизированное программирование в Agda» (PDF) . Гетеборг: Университет Чалмерса . Проверено 9 февраля 2012 года .
  6. ^ Худак и др. 2007 , стр. 12–38, 43.
  7. ^ Страуструп, Бьярне ; Саттон, Эндрю (2011). «Проектирование концептуальных библиотек для C++» (PDF) . Языковая инженерия программного обеспечения . Архивировано из оригинала (PDF) 10 февраля 2012 года.
  8. ^ Jump up to: Перейти обратно: а б с д и ж г час я дж Худак и др. 2007 , стр. 12–45–46.
  9. ^ Jump up to: Перейти обратно: а б Мейер, Эрик (2006). «Исповедь продавца подержанных языков программирования: как привлечь массы к Haskell». Упсла 2007 . CiteSeerX   10.1.1.72.868 .
  10. ^ Мейер, Эрик (1 октября 2009 г.). «Лекции C9: доктор Эрик Мейер - Основы функционального программирования, глава 1 из 13» . Канал 9 . Майкрософт . Проверено 9 февраля 2012 года .
  11. ^ Дроби, Садек (4 марта 2009 г.). «Эрик Мейер о LINQ» . ИнфоQ . QCon SF 2008: C4Media Inc. Проверено 9 февраля 2012 года . {{cite news}}: CS1 maint: местоположение ( ссылка )
  12. ^ Хикки, Рич. «Книжная полка Clojure» . Листмания! . Архивировано из оригинала 3 октября 2017 года . Проверено 3 октября 2017 г.
  13. ^ Хеллер, Мартин (18 октября 2011 г.). «Подними нос от Dart и почувствуй запах CoffeeScript» . Инфомир . Проверено 15 июля 2020 г.
  14. ^ «Декларативное программирование в Эшере» (PDF) . Проверено 7 октября 2015 г.
  15. ^ Сайм, Дон ; Гранич, Адам; Чистернино, Антонио (2007). Эксперт F# . Апресс . п. 2. F# также опирается на Haskell, в частности, в отношении двух продвинутых функций языка, называемых выражениями последовательности и рабочими процессами .
  16. ^ «Facebook представляет «Hack» — язык программирования будущего» . ПРОВОДНОЙ . 20 марта 2014 г.
  17. ^ «Идрис, зависимо типизированный язык» . Проверено 26 октября 2014 г.
  18. ^ «Вдохновение LiveScript» . Проверено 4 февраля 2014 г.
  19. ^ Фриман, Фил (2016). «PureScript на примере» . Линпаб . Проверено 23 апреля 2017 г.
  20. ^ Кучлинг А.М. «HOWTO по функциональному программированию» . Документация Python v2.7.2 . Фонд программного обеспечения Python . Проверено 9 февраля 2012 года .
  21. ^ «Словарь терминов и жаргона» . Perl Foundation Perl 6 Wiki . Фонд Перла . Архивировано из оригинала 21 января 2012 года . Проверено 9 февраля 2012 года .
  22. ^ «Влияния — Справочник по ржавчине» . Справочник по ржавчине . Проверено 31 декабря 2023 г.
  23. ^ Фогус, Майкл (6 августа 2010 г.). «Мартин Одерский возьми(5) в список» . Отправьте больше парамедиков . Проверено 9 февраля 2012 года .
  24. ^ Латтнер, Крис (3 июня 2014 г.). «Домашняя страница Криса Лэттнера» . Крис Лэттнер . Проверено 3 июня 2014 г. Язык Swift — это продукт неустанных усилий команды языковых экспертов, гуру документации, ниндзя по оптимизации компиляторов и невероятно важной внутренней экспериментальной группы, которая предоставляла отзывы, помогающие совершенствовать и проверять идеи. Конечно, он также получил большую пользу от опыта, с трудом полученного многими другими языками в этой области, черпая идеи из Objective-C, Rust, Haskell, Ruby, Python, C#, CLU и многих других, чтобы их перечислять.
  25. ^ Шевалье, Тим (28 января 2008 г.). "Кто-нибудь может сказать мне, как произносится слово "хаскелл"?" . Haskell-кафе (Список рассылки) . Проверено 12 марта 2011 г.
  26. ^ Вывод типа, первоначально использовавший вывод типа Хиндли-Милнера.
  27. ^ Jump up to: Перейти обратно: а б с Пейтон Джонс, 2003 год .
  28. ^ Эдвард Кметт, Эдвард Кметт - Типовые классы против мира
  29. ^ Моссберг, Эрик (8 июня 2020 г.), erkmos/haskell-company , дата обращения 22 июня 2020 г.
  30. ^ О'Салливан, Брайан; Герцен, Джон; Стюарт, Дональд Брюс (15 ноября 2008 г.). Реальный мир Haskell: код, в который можно поверить . «О'Рейли Медиа, Инк.». стр. xxviii – xxxi. ISBN  978-0-596-55430-9 .
  31. ^ «Haskell в производстве: Книга рисков» . Компания по разработке программного обеспечения Serokell . Проверено 7 сентября 2021 г.
  32. ^ «Индекс популярности языков программирования PYPL» . pypl.github.io . Май 2021 г. Архивировано из оригинала 7 мая 2021 г. Проверено 16 мая 2021 г.
  33. ^ Фредериксон, Бен. «Рейтинг языков программирования по пользователям GitHub» . www.benfrederickson.com . Проверено 6 сентября 2019 г.
  34. ^ Jump up to: Перейти обратно: а б с Пейтон Джонс 2003 , Предисловие.
  35. ^ Уодлер, Филип (октябрь 1988 г.). «Как сделать специальный полиморфизм менее специальным» .
  36. ^ Пейтон Джонс, Саймон (2003). «Власяница: ретроспектива Haskell» . Майкрософт .
  37. ^ «Haskell Wiki: Реализации» . Проверено 18 декабря 2012 г.
  38. ^ «Добро пожаловать в Хаскель » . Haskell Wiki . Архивировано из оригинала 20 февраля 2016 года . Проверено 11 февраля 2016 г. .
  39. ^ Команда GHC 2020 (29 октября 2021 г.) GHC 9.2.1 Выпущен
  40. ^ Предлагаемые изменения компилятора и языка для GHC и GHC/Haskell.
  41. ^ Вадлер, П.; Блотт, С. (1989). «Как сделать специальный полиморфизм менее специальным». Материалы 16-го симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования - POPL '89 . АКМ . стр. 60–76. дои : 10.1145/75277.75283 . ISBN  978-0-89791-294-5 . S2CID   15327197 .
  42. ^ Халлгрен, Т. (январь 2001 г.). «Развлечение с функциональными зависимостями или типы как значения в статических вычислениях в Haskell» . Материалы совместной зимней встречи CS/CE . Варберг, Швеция.
  43. ^ Игра с тестами компьютерного языка
  44. ^ «Статистика HackageDB» . Hackage.haskell.org. Архивировано из оригинала 3 мая 2013 года . Проверено 26 июня 2013 г.
  45. ^ «Реализации» в Haskell Wiki
  46. ^ «Бэкенд LLVM» . ГХК Трак . 29 марта 2019 г.
  47. ^ Терей, Дэвид А.; Чакраварти, Мануэль М.Т. (2010). «Бэкенд LLVM для GHC» . Материалы симпозиума ACM SIGPLAN Haskell 2010 . АКМ Пресс.
  48. ^ К. Райдер и С. Томпсон (2005). «Портирование HaRe на GHC API»
  49. ^ Утрехтский компилятор Haskell
  50. ^ Худак и др. 2007 , стр. 12–22.
  51. ^ Agda 2 , Сообщество Agda Github, 15 октября 2021 г. , получено 16 октября.
  52. ^ «Кабала Хаскелла» . Проверено 8 апреля 2015 г.
  53. ^ «Команда Linspire/Freespire Core OS и Haskell» . Список рассылки Debian Haskell . Май 2006.
  54. ^ «Живой код с приливными циклами | Приливные циклы» . doc.tidalcycles.org . Проверено 19 января 2022 г.
  55. ^ xmonad.org
  56. ^ «Гаргантекст/Основной» . 13 июля 2023 г.
  57. ^ Давид, Чавалариас; и др. (8 мая 2023 г.). К программе исследований цифровых медиа и благополучия человечества (отчет).
  58. ^ «Борьба со спамом с помощью Haskell» . Код Фейсбука . 26 июня 2015 года . Проверено 11 августа 2019 г.
  59. ^ «Haxl с открытым исходным кодом, библиотека для Haskell» . Код Фейсбука . 10 июня 2014 года . Проверено 11 августа 2019 г.
  60. ^ «input-output-hk/cardano-node: основной компонент, который используется для участия в децентрализованной цепочке блоков Cardano» . Гитхаб . Проверено 18 марта 2022 г.
  61. ^ Разбор, анализ и сравнение исходного кода на многих языках: github/semantic , GitHub, 7 июня 2019 г. , получено 7 июня 2019 г.
  62. ^ «Отчет о семинаре для коммерческих пользователей функционального программирования» (PDF) . Проверено 10 июня 2022 г.
  63. ^ Jump up to: Перейти обратно: а б с д Формальное доказательство функциональной корректности было завершено в 2009 году. Кляйн, Гервин; Эльфинстон, Кевин; Хайзер, Гернот ; Андроник, июнь; Кок, Дэвид; Деррин, Филип; Элькадуве, Дхаммика; Энгельхардт, Кай; Колански, Рафаль; Норриш, Майкл; Сьюэлл, Томас; Тач, Харви; Уинвуд, Саймон (октябрь 2009 г.). «seL4: формальная проверка ядра ОС» (PDF) . 22-й симпозиум ACM по принципам работы операционных систем . Биг Скай, Монтана, США.
  64. ^ «Тихон Джелвис: Haskell у цели» . Ютуб .
  65. ^ «Почему Co-Star использует Haskell» . Созвездие . Проверено 30 сентября 2023 г.
  66. ^ «Веб/фреймворки – HaskellWiki» . wiki.haskell.org . Проверено 17 сентября 2022 г.
  67. ^ Ян-Виллем Мессен. Eager Haskell: выполнение с ограничением ресурсов обеспечивает эффективную итерацию . Материалы семинара SIGPLAN Ассоциации вычислительной техники (ACM) 2002 года по Haskell.
  68. ^ [ мертвая ссылка ] Саймон Пейтон Джонс. Ношение власяницы: ретроспектива по Haskell . Приглашенный доклад на POPL 2003.
  69. ^ «Ленивая оценка может привести к отличной производительности, как, например, в игре «The Computer Language Benchmarks Game» . 27 июня 2006 г.
  70. ^ Господа, Бастиан; Лейен, Даан; ван Эйзендорн, Арьян (2003). «Гелий для изучения Haskell» (PDF) . Материалы семинара ACM SIGPLAN 2003 года по Haskell . стр. 62–71. дои : 10.1145/871895.871902 . ISBN  1581137583 . S2CID   11986908 .
  71. ^ «Документация по компилятору гелия» . Гитхаб . Проверено 9 июня 2023 г.
  72. ^ «DDC – HaskellWiki» . Хаскелл.орг. 3 декабря 2010 года . Проверено 26 июня 2013 г.
  73. ^ Бен Липпмайер, Вывод типов и оптимизация для нечистого мира , Австралийский национальный университет (2010), докторская диссертация, глава 1
  74. ^ Роберт Харпер (25 апреля 2011 г.). «Точка лени» . Значок закрытого доступа
  75. ^ Роберт Харпер (16 апреля 2011 г.). «Модули имеют наибольшее значение» . Значок закрытого доступа
  76. ^ «Решение Кабал-Ада» . www.yesodweb.com . Проверено 11 августа 2019 г.
  77. ^ «Анонсируем новую сборку клики: локальные сборки в стиле Nix» . Проверено 1 октября 2019 г.
  78. ^ https://zfoh.ch/
  79. ^ «Хакатон — HaskellWiki» .

Библиография [ править ]

Отчеты
Учебники
Учебники
История

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 6f331b1eac31f20ba5007023becd286a__1710792420
URL1:https://arc.ask3.ru/arc/aa/6f/6a/6f331b1eac31f20ba5007023becd286a.html
Заголовок, (Title) документа по адресу, URL1:
Haskell - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)