<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://camokathomelab.servebeer.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=31.181.80.100</id>
	<title>wiki12 - Вклад [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://camokathomelab.servebeer.com/mediawiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=31.181.80.100"/>
	<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/31.181.80.100"/>
	<updated>2026-07-17T09:40:08Z</updated>
	<subtitle>Вклад</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://camokathomelab.servebeer.com/mediawiki/index.php?title=Haskell&amp;diff=8819</id>
		<title>Haskell</title>
		<link rel="alternate" type="text/html" href="https://camokathomelab.servebeer.com/mediawiki/index.php?title=Haskell&amp;diff=8819"/>
		<updated>2025-12-22T19:08:10Z</updated>

		<summary type="html">&lt;p&gt;31.181.80.100: Добавлен источник к абзацу&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{←|Хаскель|Хаскель (значения)|также}}&lt;br /&gt;
{{Карточка языка программирования&lt;br /&gt;
| name = Haskell&lt;br /&gt;
| logo = Haskell-logo2.svg&lt;br /&gt;
| paradigm = [[функциональное программирование|функциональный]], [[отложенные вычисления|ленивый]], [[модульность (программирование)|модульный]]&lt;br /&gt;
| class = [[компилятор|компилируемый]], [[интерпретатор|интерпретируемый]]&lt;br /&gt;
| year = {{start date and age|1990}}&lt;br /&gt;
| последняя версия = Haskell 2010&lt;br /&gt;
| дата выпуска последней версии = {{start date and age|2010|07}}&lt;br /&gt;
| последняя тестовая версия = Haskell 2020&amp;lt;ref&amp;gt;{{Cite news|title=Haskell Prime 2020 committee has formed|url=https://mail.haskell.org/pipermail/haskell-prime/2016-April/004050.html|access-date=2022-04-01|archive-date=2016-06-11|archive-url=https://web.archive.org/web/20160611031104/https://mail.haskell.org/pipermail/haskell-prime/2016-April/004050.html}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
| typing = [[Полнотиповое программирование|полная]] [[Сильная и слабая типизация|сильная]] [[статическая типизация|статическая]] [[вывод типов|с выводом типов]]&lt;br /&gt;
&amp;lt;!-- &lt;br /&gt;
  |typing= [[Полнотиповое программирование|полная]], основанная на [[Система типов Хиндли — Милнера|системе типов Хиндли — Милнера]]&lt;br /&gt;
--&amp;gt;| implementations = {{s|[[Glasgow Haskell Compiler|GHC]]}}, [[HUGS]], {{s|[[Another Haskell Compiler|NHC]]}}, {{s|[[York Haskell Compiler|YHC]]}}&lt;br /&gt;
| dialects = Helium, [[Gofer]], O&#039;Haskell, Haskell++, Mondrian,&amp;lt;br&amp;gt;Disciple&lt;br /&gt;
| influenced = [[Agda]], {{iw|Bluespec||en|Bluespec}}, [[Clojure]], [[C Sharp|C#]], [[Cat (язык программирования)|Cat]], {{iw|Cayenne||en|Cayenne (programming language)}}, [[Clean]], [[Curry]], {{iw|Epigram||en|Epigram (programming language)}}, {{iw|Escher||en|Escher (programming language)}}, [[F Sharp|F#]], [[Factor (язык программирования)|Factor]], [[Idris (язык программирования)|Idris]], [[Isabelle]], [[Обобщённое программирование#Java|Java Generics]], [[LINQ]], [[Mercury (язык программирования)|Mercury]], {{iw|Ωmega||en|Ωmega interpreter}}, [[Python (язык программирования)|Python]], {{iw|Qi (язык программирования)|Qi|en|Qi (programming language)}}, [[Raku]], [[Rust (язык программирования)|Rust]], [[Scala (язык программирования)|Scala]], [[Swift (язык программирования)|Swift]], {{iw|Timber (язык программирования)|Timber|en|Timber (programming language)}}, [[Visual Basic .NET|Visual Basic 9.0]]&lt;br /&gt;
| influenced_by = [[ML]] и {{nobr|[[Standard ML]]}}, {{nobr|{{iw|Lazy ML}}}}, [[Миранда (язык программирования)|Miranda]], [[Lisp]] и [[Scheme (язык программирования)|Scheme]], [[ISWIM]], {{iw|FP||en|FP (programming language)}},&amp;lt;br&amp;gt;[[АПЛ (язык программирования)|АПЛ]], [[Hope (язык программирования)|Hope и Hope+]],  {{iw|SISAL}}, [[Orwell (язык программирования)|Orwell]], {{iw|Id (язык программирования)|Id|en|Id (programming language)}}&lt;br /&gt;
| operating_system = portable&lt;br /&gt;
| license = &lt;br /&gt;
| сайт = https://www.haskell.org/&lt;br /&gt;
| file ext = &amp;lt;code&amp;gt;.hs&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;.lhs&amp;lt;/code&amp;gt;&lt;br /&gt;
}}&lt;br /&gt;
&#039;&#039;&#039;Haskell&#039;&#039;&#039; (&amp;lt;small&amp;gt;[[МФА]]&amp;lt;/small&amp;gt;: {{МФА2|h|æ|s|k|ə|l}}) — стандартизированный [[Чистота языка программирования|чистый]] [[функциональное программирование|функциональный]] [[язык программирования]] общего назначения. Является одним из самых распространённых языков программирования с поддержкой [[отложенные вычисления|отложенных вычислений]]. Система типов — [[Полнотиповое программирование|полная]], [[Сильная и слабая типизация|сильная]], [[статическая типизация|статическая]], с автоматическим [[вывод типов|выводом типов]], основанная на [[Система типов Хиндли — Милнера|системе типов Хиндли — Милнера]]. Поскольку язык функциональный, то основная управляющая структура — это [[функция (программирование)|функция]].&lt;br /&gt;
&lt;br /&gt;
Отличительная черта языка — серьёзное отношение к типизации; во многом в связи с этим язык назван в честь исследователя [[Теория типов|теории типов]] и изобретателя [[Комбинаторная логика|комбинаторной логики]] [[Карри, Хаскелл|Хаскелла Карри]].&lt;br /&gt;
&lt;br /&gt;
Имеются средства [[интероперабельность|взаимодействия]] с кодом на других языках программирования. Есть встроенная поддержка [[многопоточность|многозадачного]] и [[Параллельные вычисления|параллельного]] программирования, развитый инструментарий (средства автоматического [[Тестирование программного обеспечения|тестирования]], [[отладка|отладки]] и [[Профилирование (информатика)|профилирования]], в том числе для параллельных программ), существует несколько тысяч библиотек [[Открытое программное обеспечение|с открытым исходным кодом]].&lt;br /&gt;
&lt;br /&gt;
== История ==&lt;br /&gt;
Haskell принадлежит к семейству языков [[ML]]. Непосредственно на него оказал большое влияние язык [[Миранда (язык программирования)|Миранда]], разработанный в 1985 году [[Тёрнер, Дэвид|Дэвидом Тёрнером]]. Миранда был первым чистым функциональным языком, имевшим коммерческую поддержку, и был относительно популярен в 1980-х годах, но оставался [[Проприетарное программное обеспечение|собственническим программным обеспечением]]. Это затрудняло развитие и исследования возможностей ленивого функционального программирования, поэтому буквально за пару лет появилось более десятка схожих языков. Чтобы объединить усилия разных разработчиков в 1987 году на конференции по функциональным языкам программирования и компьютерной архитектуре в Орегоне (FPCA’87) было решено создать комитет для разработки [[Открытый стандарт|открытого стандарта]].&lt;br /&gt;
&lt;br /&gt;
В 1990 году была предложена первая версия языка, Haskell 1.0. В дальнейшем работа комитета продолжилась, и в 1999 году был опубликован «The Haskell 98 Report»&amp;lt;ref&amp;gt;[http://www.haskell.org/onlinereport/ The Haskell 98 Language Report] {{Wayback|url=http://www.haskell.org/onlinereport/ |date=20100308015222 }} — получено 05.02.2010&amp;lt;/ref&amp;gt;, который стал стабильным стандартом языка на много лет. Язык, однако, продолжал бурно развиваться, компилятор [[Glasgow Haskell Compiler|GHC]] был фактическим стандартом в отношении новых возможностей.&lt;br /&gt;
&lt;br /&gt;
Разработка новых версий языка идёт открыто, этот процесс получил название Haskell’&amp;lt;ref&amp;gt;{{Cite web |url=http://hackage.haskell.org/trac/haskell-prime/ |title=Haskell Prime |access-date=2010-02-05 |archive-url=https://web.archive.org/web/20081219040836/http://hackage.haskell.org/trac/haskell-prime/ |archive-date=2008-12-19 |url-status=dead }}&amp;lt;/ref&amp;gt; (Haskell Prime [ˈhæskəl praɪm], «Хаскелл-штрих»). Все желающие могут выдвигать свои предложения к обсуждению, предложения обсуждаются в течение года, комитет отбирает и объявляет предложения, которые готов принять, формируется новый комитет и к концу года готовится новая версия языка. Таким образом, новые версии языка теперь могут появляться каждый год. Планируется объявлять некоторые ревизии «значительными» и поддерживать такие ревизии на протяжении длительного времени.&lt;br /&gt;
&lt;br /&gt;
Версия языка Haskell 2010 — была объявлена в конце 2009 года&amp;lt;ref&amp;gt;{{Cite web |url=http://www.haskell.org/pipermail/haskell/2009-November/021750.html |title=Simon Marlow, Announcing Haskell 2010 |access-date=2009-12-26 |archive-date=2015-02-13 |archive-url=https://web.archive.org/web/20150213025809/https://www.haskell.org/pipermail/haskell/2009-November/021750.html |url-status=live }}&amp;lt;/ref&amp;gt;, но последней «значительной» версией (стандартом) остаётся Haskell 98.&lt;br /&gt;
&lt;br /&gt;
== Характеристики языка ==&lt;br /&gt;
В качестве основных характеристик языка Haskell можно выделить следующие:&lt;br /&gt;
&lt;br /&gt;
* недопустимость побочных эффектов ([[чистота языка программирования|чистота языка]]); возможность писать программы с побочными эффектами без нарушения парадигмы [[функциональное программирование|функционального программирования]] с помощью [[монада (программирование)|монад]];&lt;br /&gt;
* [[статическая типизация|статическая]] [[Сильная и слабая типизация|сильная]] [[Полнотиповое программирование|полная]] типизация с автоматическим [[вывод типов|выведением типов]], основанная на [[Система типов Хиндли — Милнера|типизации Хиндли — Милнера]];&lt;br /&gt;
* [[функция высшего порядка|функции высшего порядка]], в том числе [[лямбда-исчисление|лямбда-абстракции]];&lt;br /&gt;
* [[Каррирование|частичное применение]];&lt;br /&gt;
* [[ленивые вычисления]];&lt;br /&gt;
* [[сопоставление с образцом]] ({{lang-en|pattern matching}}), функциональные образцы, [[охрана (программирование)|охраняющие выражения]] (guards);&lt;br /&gt;
* [[параметрический полиморфизм]] и его объединение с [[ad-hoc-полиморфизм]]ом в единую модель посредством [[Класс типов|классов типов]];&lt;br /&gt;
* [[алгебраический тип данных|алгебраические типы]] данных, в том числе псевдобесконечные (за счёт [[ленивые вычисления|ленивости]]);&lt;br /&gt;
* [[списковое включение]];&lt;br /&gt;
* возможность интеграции с программами, реализованными на [[императивный язык программирования|императивных языках программирования]] посредством [[интерфейс внешних функций|интерфейса внешних функций]]&amp;lt;ref&amp;gt;{{Cite web |url=http://www.cse.unsw.edu.au/~chak/haskell/ffi/ |title=The Haskell 98 Foreign Function Interface 1.0: An Addendum to the Haskell 98 Report  |access-date=2004-10-16 |archive-date=2004-10-10 |archive-url=https://web.archive.org/web/20041010152241/http://www.cse.unsw.edu.au/~chak/haskell/ffi/ |url-status=live }}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
С момента принятия последнего стандарта языка (Haskell’98) ведущие реализации языка (ghc и hugs) были расширены множеством дополнительных возможностей:&lt;br /&gt;
* [[параметрический полиморфизм#Ранг|параметрический полиморфизм высших рангов]] за счёт [[переменная типа#Связывание и квантификация переменных типа|квантификации переменных типа]] (вплоть до [[параметрический полиморфизм#Импредикативный полиморфизм|импредикативного]]) — естественно, исключающая [[выведение типов]];&lt;br /&gt;
* функциональные зависимости.&lt;br /&gt;
&lt;br /&gt;
== Реализации языка ==&lt;br /&gt;
Есть несколько реализаций языка Haskell&amp;lt;ref&amp;gt;{{Cite web |url=http://www.haskell.org/haskellwiki/Implementations |title=Реализации языка Haskell (англ.) |access-date=2010-02-24 |archive-date=2010-03-17 |archive-url=https://web.archive.org/web/20100317121943/http://haskell.org/haskellwiki/Implementations |url-status=live }}&amp;lt;/ref&amp;gt;. Некоторые реализации ориентированы на практическое применение, в то время как другие — представляют прежде всего академический интерес.&lt;br /&gt;
&lt;br /&gt;
=== Компиляторы и интерпретаторы ===&lt;br /&gt;
Наиболее популярен&amp;lt;ref&amp;gt;{{Cite news|title=2017 state of Haskell survey results|url=https://taylor.fausak.me/2017/11/15/2017-state-of-haskell-survey-results/#question-14|work=taylor.fausak.me|access-date=2018-11-12|lang=en|archive-date=2018-11-08|archive-url=https://web.archive.org/web/20181108034002/http://taylor.fausak.me/2017/11/15/2017-state-of-haskell-survey-results/#question-14}}&amp;lt;/ref&amp;gt; на практике оптимизирующий компилятор [[Glasgow Haskell Compiler|GHC]], который создаёт быстрый код и позволяет использовать многие расширения языка. GHC может оптимизировать как скорость, так и компактность программ, способен создавать многозадачный и параллелизованный код. В комплекте с компилятором GHC поставляется также [[REPL|интерактивная среда программирования]] GHCi со встроенным отладчиком. GHC работает в Windows, MacOS X и на нескольких юникс-подобных платформах (Linux, *BSD, Solaris). Именно GHC является стандартным компилятором в Haskell Platform, и именно на нём в первую очередь тестируются все новые библиотеки&amp;lt;ref&amp;gt;[https://www.microsoft.com/en-us/research/wp-content/uploads/2012/01/aos.pdf The Glasgow Haskell Compiler. The Architecture of Open Source Applications, Volume 2] {{Wayback|url=https://www.microsoft.com/en-us/research/wp-content/uploads/2012/01/aos.pdf |date=20170530210307 }}, 2012{{ref|en}}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Другая популярная реализация языка — интерпретатор [[HUGS]]. Он написан на [[Си (язык программирования)|Си]], имеет малый размер дистрибутива и работает практически на всех платформах. HUGS предоставляет [[REPL|интерактивную среду]] программирования, но может также запускать программы на Haskell в стиле [[скриптовый язык|скриптовых языков]]. Пользователи Windows могут использовать графическую интерактивную среду WinHugs. Поскольку HUGS — это интерпретатор, то программы, запущенные в нём, выполняются медленнее, чем код, созданный большинством компиляторов языка Haskell. HUGS часто рекомендуют в качестве среды для изучения языка. HUGS полностью поддерживает стандарт языка Haskell 98, а также некоторые наиболее популярные расширения языка.&lt;br /&gt;
&lt;br /&gt;
Другие известные реализации&amp;lt;ref&amp;gt;{{Cite web |url=http://www.sc.ehu.es/jiwlucap/history.pdf |title=A history of Haskell: being lazy with class — SIGPLAN, 2007 |access-date=2017-09-09 |archive-date=2017-09-09 |archive-url=https://web.archive.org/web/20170909185749/http://www.sc.ehu.es/jiwlucap/history.pdf |url-status=live }}&amp;lt;/ref&amp;gt;:&lt;br /&gt;
&lt;br /&gt;
* nhc98 — быстрый компилятор, поддерживающий стандарт Haskell 98, написанный на Haskell 98; доступен для всех юникс-подобных платформ, включая MacOS X и Windows/cygwin;&lt;br /&gt;
* YHC (York Haskell Compiler) — форк nhc98, ставящий целью быть более переносимым и эффективным, поддерживает отладчик Hat; генерирует промежуточный байт-код, который можно использовать для генерации кода на других языках программирования;&lt;br /&gt;
* UHC (Utrecht Haskell Compiler) — компилятор, поддерживающий Haskell 98 почти полностью, а также некоторые расширения; поддерживает глобальный анализ программ; имеет несколько кодогенераторов, в том числе почти полностью функциональный генератор JVM-кода, кодогенераторы для LLVM и CLR в состоянии разработки; работает на юникс-подобных системах (включая MacOS X и Windows/cygwin);&lt;br /&gt;
* HBI и HBC — интерпретатор и компилятор, поддерживающие стандарт Haskell 98 с некоторыми расширениями; точно работает в Linux, поддерживается слабо;&lt;br /&gt;
* LHC (The Luxurious LHC Haskell Optimization System) — альтернативный кодогенератор для GHC, поддерживающий глобальную низкоуровневую оптимизацию программы в целом;&lt;br /&gt;
* jhc — экспериментальный компилятор для исследования возможностей глобальной оптимизации программ;&lt;br /&gt;
* Yale Haskell — ранняя реализация языка Haskell на [[Лисп]]е.&lt;br /&gt;
&lt;br /&gt;
=== Haskell Platform ===&lt;br /&gt;
В 2009 году сформировалась концепция Haskell Platform&amp;lt;ref&amp;gt;{{Cite web |url=http://hackage.haskell.org/platform/ |title=The Haskell Platform |access-date=2010-02-24 |archive-date=2010-02-27 |archive-url=https://web.archive.org/web/20100227052926/http://hackage.haskell.org/platform/ |url-status=live }}&amp;lt;/ref&amp;gt; — стандартного дистрибутива языка, включающего кроме компилятора (GHC), также дополнительный инструментарий (систему сборки и развёртывания пакетов Cabal) и набор популярных библиотек.&lt;br /&gt;
&lt;br /&gt;
С 2022 года Haskell Platform считается устаревшим способом установки Haskell.&amp;lt;ref&amp;gt;{{Cite web|url=https://www.haskell.org/platform/|title=Haskell Platform|website=www.haskell.org|access-date=2025-12-22}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Альтернативные целевые платформы ===&lt;br /&gt;
Большинство компиляторов языка Haskell создают непосредственно [[машинный код]] для используемой платформы, но есть несколько проектов, позволяющих производить код для [[Виртуальная машина|виртуальных машин]] или генерировать код на других языках программирования. Степень зрелости и уровень поддержки подобных проектов сильно разнится.&lt;br /&gt;
&lt;br /&gt;
* [[Low Level Virtual Machine|LLVM]]:&lt;br /&gt;
** патч для GHC&amp;lt;ref&amp;gt;{{Cite web |url=http://www.haskell.org/pipermail/cvs-ghc/2010-February/052606.html |title=Merge Request: LLVM Code Generator for GHC |access-date=2010-02-24 |archive-url=https://web.archive.org/web/20100223050431/http://www.haskell.org/pipermail/cvs-ghc/2010-February/052606.html |archive-date=2010-02-23 |url-status=dead }}&amp;lt;/ref&amp;gt;, добавляющий генератор кода для LLVM, в настоящее время включён в компилятор GHC&amp;lt;ref&amp;gt;{{Cite web |url=http://blog.llvm.org/2010/05/glasgow-haskell-compiler-and-llvm.html |title=The Glasgow Haskell Compiler and LLVM |access-date=2011-08-07 |archive-date=2011-06-25 |archive-url=https://web.archive.org/web/20110625103122/http://blog.llvm.org/2010/05/glasgow-haskell-compiler-and-llvm.html |url-status=live }}&amp;lt;/ref&amp;gt;; использование LLVM позволяет достичь большей производительности на ряде задач&amp;lt;ref&amp;gt;{{Cite web |url=http://donsbot.wordpress.com/2010/02/21/smoking-fast-haskell-code-using-ghcs-new-llvm-codegen/ |title=Smoking fast Haskell code using GHC’s new LLVM codegen |access-date=2010-02-24 |archive-date=2010-02-25 |archive-url=https://web.archive.org/web/20100225183147/http://donsbot.wordpress.com/2010/02/21/smoking-fast-haskell-code-using-ghcs-new-llvm-codegen/ |url-status=live }}&amp;lt;/ref&amp;gt;.&lt;br /&gt;
** альтернативный кодогенератор в UHT (работоспособен частично)&lt;br /&gt;
&lt;br /&gt;
* виртуальная машина Java (JVM):&lt;br /&gt;
** LambdaVM&amp;lt;ref&amp;gt;{{Cite web |url=http://wiki.brianweb.net/LambdaVM/LambdaVM |title=LambdaVM |access-date=2010-02-24 |archive-url=https://web.archive.org/web/20100215030406/http://wiki.brianweb.net/LambdaVM/LambdaVM |archive-date=2010-02-15 |url-status=dead }}&amp;lt;/ref&amp;gt; — патч для GHC, добавляющий генератор [[байт-код]]а JVM&lt;br /&gt;
** jvm-bridge&amp;lt;ref&amp;gt;{{Cite web |url=http://semantic.org/jvm-bridge/ |title=JVM-Bridge |access-date=2010-02-24 |archive-url=https://web.archive.org/web/20100508213123/http://semantic.org/jvm-bridge/ |archive-date=2010-05-08 |url-status=dead }}&amp;lt;/ref&amp;gt; — мост между Haskell и JVM (для GHC)&lt;br /&gt;
** jaskell&amp;lt;ref&amp;gt;{{Cite web |url=http://www.scdi.org/~avernet/projects/jaskell/ |title=The Jaskell Project Home Page |access-date=2010-02-24 |archive-url=https://web.archive.org/web/20090126053014/http://scdi.org/~avernet/projects/jaskell |archive-date=2009-01-26 |url-status=dead }}&amp;lt;/ref&amp;gt; — генератор байт-кода JVM (вероятно заброшен)&lt;br /&gt;
** альтернативный кодогенератор в UHC (работоспособен почти полностью)&lt;br /&gt;
&lt;br /&gt;
* Common Language Runtime (.Net):&lt;br /&gt;
** прототип генератора MSIL-кода&amp;lt;ref&amp;gt;{{Cite web |url=http://tom.lokhorst.eu/ehc/clr/ |title=Running Haskell on the CLR (using UHC) |access-date=2010-02-24 |archive-date=2021-08-09 |archive-url=https://web.archive.org/web/20210809094458/https://fonts.googleapis.com/css?family=Merriweather%3A400%2C700%2C900%2C400italic%2C700italic%2C900italic%7CMontserrat%3A400%2C700%7CInconsolata%3A400&amp;amp;subset=latin%2Clatin-ext |url-status=live }}&amp;lt;/ref&amp;gt; для компилятора EHT/UHT&lt;br /&gt;
** некоторые проекты по поддержке CLR упоминаются в GHC FAQ&amp;lt;ref&amp;gt;{{Cite web |url=http://www.haskell.org/haskellwiki/GHC:FAQ#Why_isn.27t_GHC_available_for_.NET_or_on_the_JVM.3F |title=1.5.1 Why isn’t GHC available for .NET or on the JVM? |access-date=2010-02-24 |archive-date=2010-03-29 |archive-url=https://web.archive.org/web/20100329073510/http://www.haskell.org/haskellwiki/GHC:FAQ#Why_isn.27t_GHC_available_for_.NET_or_on_the_JVM.3F |url-status=live }}&amp;lt;/ref&amp;gt;, на начало 2010 года их состояние не ясно&lt;br /&gt;
&lt;br /&gt;
* JavaScript:&lt;br /&gt;
** кодогенератор JavaScript для GHC&amp;lt;ref&amp;gt;{{Cite web |url=http://vir.mskhug.ru/ |title=кодогенератор JavaScript для GHC |access-date=2010-02-24 |archive-url=https://web.archive.org/web/20100313172045/http://vir.mskhug.ru/ |archive-date=2010-03-13 |url-status=dead }}&amp;lt;/ref&amp;gt; — патч для GHC, позволяющий компилировать программы в JavaScript-код&lt;br /&gt;
** Ycr2Js&amp;lt;ref&amp;gt;{{Cite web |url=http://haskell.org/haskellwiki/Yhc/Javascript |title=Yhc/Javascript, YCR2JS, a Converter of Yhc Core to Javascript |access-date=2010-02-24 |archive-date=2010-06-03 |archive-url=https://web.archive.org/web/20100603072155/http://haskell.org/haskellwiki/Yhc/Javascript |url-status=live }}&amp;lt;/ref&amp;gt; — конвертер байт-кода компилятора YHC в JavaScript&lt;br /&gt;
** Fay — компилятор подмножества Haskell в JavaScript&amp;lt;ref&amp;gt;{{Cite web |url=https://github.com/faylang/fay/wiki |title=Home · faylang/fay Wiki · GitHub&amp;lt;!-- Заголовок добавлен ботом --&amp;gt; |access-date=2013-06-25 |archive-date=2013-06-24 |archive-url=https://web.archive.org/web/20130624093535/https://github.com/faylang/fay/wiki |url-status=live }}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Языки описания архитектуры (Verilog/VHDL):&lt;br /&gt;
** Clash&amp;lt;ref&amp;gt;{{Cite web |url=http://www.clash-lang.org/ |title=CλaSH — From Haskell to Hardware |access-date=2018-06-16 |archive-date=2018-06-15 |archive-url=https://web.archive.org/web/20180615032500/http://www.clash-lang.org/ |url-status=live }}&amp;lt;/ref&amp;gt; — альтернативный способ разработки [[ASIC]] и программирования [[FPGA]]&lt;br /&gt;
&lt;br /&gt;
Несколько интересных целевых платформ доступны при использовании компилятора YHC, в частности существуют интерпретатор байт-кода YHC на Python и конвертер байт-кода YHC в Erlang Core, но эти разработки пока ещё экспериментальны. Также существуют реализации подмножеств языка на разных целевых платформах.&lt;br /&gt;
&lt;br /&gt;
=== Расширения языка ===&lt;br /&gt;
* макрорасширение с контролем типов ({{нп5|Template Haskell}});&lt;br /&gt;
* [[объектно-ориентированное программирование]] (O’Haskell, Haskell++ и Mondrian).&lt;br /&gt;
&lt;br /&gt;
Расширения реализаций языка (относится к GHC):&lt;br /&gt;
&lt;br /&gt;
* развитие системы типизации;&lt;br /&gt;
* [[многопоточность]];&lt;br /&gt;
* [[параллельные вычисления]];&lt;br /&gt;
* [[распределённые вычисления]];&lt;br /&gt;
* [[Программная транзакционная память|транзакционная память]].&lt;br /&gt;
&lt;br /&gt;
== Примеры ==&lt;br /&gt;
&lt;br /&gt;
=== Вычисление факториала ===&lt;br /&gt;
Следующий пример показывает [[синтаксис]] языка Haskell при реализации функции для вычисления [[факториал]]а:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
 fac :: Integer -&amp;gt; Integer&lt;br /&gt;
 fac 0 = 1&lt;br /&gt;
 fac n | n &amp;gt; 0 = n * fac (n - 1)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Это определение описывает процесс вычисления факториала в виде [[рекурсия|рекурсивной функции]]. Это определение похоже на то, которое можно найти в учебниках по [[информатика|информатике]]. Большая часть исходного кода на языке Haskell походит на [[математика|математическую]] нотацию в аспектах синтаксиса и использования, например, вышеприведённый пример можно переписать в виде&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;fac n = product [1..n]&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
что соответствует математическому определению факториала.&lt;br /&gt;
&lt;br /&gt;
Первая строка в приведённом выше коде необязательна и является объявлением [[функциональный тип|функционального типа]], то есть задаёт типы аргументов (указаны до последней «&amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt;») и тип возвращаемого значения (указан после последней «&amp;lt;code&amp;gt;-&amp;gt;&amp;lt;/code&amp;gt;»). Эта строка может быть прочитана как: &#039;&#039;функция &amp;lt;code&amp;gt;fac&amp;lt;/code&amp;gt; имеет тип (&amp;lt;code&amp;gt;::&amp;lt;/code&amp;gt;) из целого в целое ({{nobr|&amp;lt;code&amp;gt;Integer -&amp;gt; Integer&amp;lt;/code&amp;gt;}})&#039;&#039;. Это значит, что она получает на вход один [[Целый тип|целочисленный]] [[аргумент (программирование)|аргумент]] (записан слева от «-&amp;gt;») и возвращает результат также целого типа (записан справа от «-&amp;gt;»). Если программист не указал типы явно, компилятор или интерпретатор может [[вывод типов|определить]] их автоматически.&lt;br /&gt;
&lt;br /&gt;
Вторая и третья строки формируют определение тела функции. Определение состоит из предложений, или «клауз» ({{lang-en|clause}}). Каждое предложение представляет собой пару «образец — выражение». Компилятор или интерпретатор использует механизм [[Сопоставление с образцом|сопоставления с образцом]] для выбора одного из выражений. В данном случае вторая строка определения будет выбрана тогда, когда фактический параметр при вызове функции &amp;lt;code&amp;gt;fac&amp;lt;/code&amp;gt; будет равен нулю.&lt;br /&gt;
&lt;br /&gt;
В третьей строке помимо механизма сопоставления с образцами использовано охраняющее выражение — {{nobr|&amp;lt;code&amp;gt;n &amp;gt; 0&amp;lt;/code&amp;gt;}}. Оно гарантирует, что функция не будет работать для отрицательных чисел, для которых факториал не определён. Если отрицательное число будет передано в качестве фактического параметра в функцию &amp;lt;code&amp;gt;fac&amp;lt;/code&amp;gt;, то программа остановится с сообщением об ошибке.&lt;br /&gt;
&lt;br /&gt;
=== Калькулятор ===&lt;br /&gt;
Простейший [[калькулятор]] для вычисления выражений в [[обратная польская запись|обратной польской записи]] может быть определён на языке Haskell при помощи одной функции:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
 calc :: String -&amp;gt; Float&lt;br /&gt;
 calc = head . foldl f [] . words&lt;br /&gt;
   where &lt;br /&gt;
     f :: [Float] -&amp;gt; String -&amp;gt; [Float]&lt;br /&gt;
     f (x:y:zs) &amp;quot;+&amp;quot;    = (y + x):zs&lt;br /&gt;
     f (x:y:zs) &amp;quot;-&amp;quot;    = (y - x):zs&lt;br /&gt;
     f (x:y:zs) &amp;quot;*&amp;quot;    = (y * x):zs&lt;br /&gt;
     f (x:y:zs) &amp;quot;/&amp;quot;    = (y / x):zs&lt;br /&gt;
     f (x:y:zs) &amp;quot;FLIP&amp;quot; = y:x:zs&lt;br /&gt;
     f (x:zs)   &amp;quot;ABS&amp;quot;  = (abs x):zs&lt;br /&gt;
     f xs       y      = read y : xs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Исходная строка со входным выражением тут разбивается стандартной функцией &amp;lt;code&amp;gt;words&amp;lt;/code&amp;gt; на список слов — строк между пробельными символами — который обрабатывается функцией левосторонней [[свёртка списка|свёртки]] (&amp;lt;code&amp;gt;foldl&amp;lt;/code&amp;gt;) слева направо по одному слову с помощью функции &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt;, которая поддерживает рабочий список прочитываемых чисел и промежуточных значений (поначалу &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt; — пустой список) и интерпретирует каждое входное слово как обозначение арифметической функции или как число, в ходе вычисления ею окончательного значения выражения (которое будет первым оставшимся значением в рабочем списке по окончании обработки списка слов входного выражения, так что его можно достать оттуда с помощью стандартной функции &amp;lt;code&amp;gt;head&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Здесь &amp;lt;code&amp;gt;(.)&amp;lt;/code&amp;gt; есть оператор композиции функций, &amp;lt;code&amp;gt;(f . g) x = f (g x)&amp;lt;/code&amp;gt;. Например,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
*Main&amp;gt; calc &amp;quot;1 2 3 + 4 * - ABS&amp;quot;&lt;br /&gt;
19.0&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Числа Фибоначчи ===&lt;br /&gt;
Другой пример показывает способ вычисления бесконечного списка [[числа Фибоначчи|чисел Фибоначчи]] за линейное время:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;fibs = 0 : 1 : zipWith (+) fibs (tail fibs)&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Бесконечный [[Линейный список|список]] здесь определён при помощи механизма [[корекурсия|корекурсии]] — последующие значения списка здесь задаются на основе предыдущих, с начальными &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; и &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; в качестве первых двух элементов списка, и выражением-[[Генератор (программирование)|генератором]] &amp;lt;code&amp;gt;zipWith (+) fibs (tail fibs)&amp;lt;/code&amp;gt;, вычисляющим все элементы начиная с третьего на основании предшествующих двух, через стандартную функцию &amp;lt;code&amp;gt;zipWith (+)&amp;lt;/code&amp;gt; которая суммирует попарно элементы двух своих входных списков.&lt;br /&gt;
&lt;br /&gt;
Это определение является примером применения механизма [[Отложенные вычисления|ленивых вычислений]], который является важнейшей частью языка Haskell. Для понимания того, как это определение работает, можно рассмотреть вычисление первых семи чисел Фибоначчи с его помощью:&lt;br /&gt;
&lt;br /&gt;
 fibs         = 0 : 1 : 1 : 2 : 3 : 5 : 8 : ...&lt;br /&gt;
                +   +   +   +   +   +&lt;br /&gt;
 tail fibs    = 1 : 1 : 2 : 3 : 5 : 8 : ...&lt;br /&gt;
                =   =   =   =   =   =&lt;br /&gt;
 zipWith (+)  = 1 : 2 : 3 : 5 : 8 : ...&lt;br /&gt;
 fibs = 0 : 1 : 1 : 2 : 3 : 5 : 8 : ...&lt;br /&gt;
&lt;br /&gt;
То же самое может быть записано также при использовании [[списковое включение|определителей списков]],&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
 fibs = 0 : 1 : [a + b | (a,b) &amp;lt;- zip fibs (tail fibs)]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или расширения языка Haskell, реализованного в компиляторе GHC (параллельных определителей списков, {{lang-en|parallel list comprehensions}}):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
 fibs = 0 : 1 : [a + b | a &amp;lt;- fibs       &lt;br /&gt;
                       | b &amp;lt;- tail fibs] &lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или с помощью напрямую [[самореференция|самореферентной]] [[Генератор (программирование)|генерирующей функции]]:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
 fibs = 0 : 1 : next fibs&lt;br /&gt;
   where&lt;br /&gt;
     next (a: t@(b:_)) = (a+b) : next t&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Простые числа ===&lt;br /&gt;
В этих примерах показано, как можно использовать списочные выражения ([[генераторы списков]]). Реализация нахождения всех [[простые числа|простых чисел]] обычным путём ([[Перебор делителей|проверка каждого числа на простоту]]):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
 -- общее определение (все натуральные числа &amp;gt; 1, которые являются простыми)&lt;br /&gt;
 primeNums = 2 : [n | n &amp;lt;- [3..], isPrime n]&lt;br /&gt;
 &lt;br /&gt;
 -- Число простое, если у него нет (простых) делителей&lt;br /&gt;
 isPrime n = foldr (\p r-&amp;gt; p*p&amp;gt;n || (rem n p /= 0 &amp;amp;&amp;amp; r)) True primeNums&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
или с помощью [[решето Эратосфена|решета Эратосфена]], в прототипичном, неэффективном варианте,&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
 primes = (map head . scanl minus [2..] . map (\p -&amp;gt; [p, p+p..])) primes&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
или эффективно, с предварительным каскадным объединением потоков составных чисел:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
 primes = 2 : _Y ((3:) . minus [5,7..] . unionAll . map (\p -&amp;gt; [p*p, p*p+2*p..]))&lt;br /&gt;
   where &lt;br /&gt;
     _Y g = g (_Y g)&lt;br /&gt;
     unionAll ((x:xs):t) = x : union xs (unionAll (pairs t))&lt;br /&gt;
     pairs ((x:xs):ys:t) = (x : union xs ys) : pairs t&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
или посегментно, массивами,&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
import Data.Array&lt;br /&gt;
import Data.List (tails, inits)&lt;br /&gt;
&lt;br /&gt;
ps = 2 : [n | (r:q:_, px) &amp;lt;- (zip . tails . (2:) . map (^2)) ps (inits ps),&lt;br /&gt;
              (n,True)    &amp;lt;- assocs (&lt;br /&gt;
                                accumArray (\_ _ -&amp;gt; False) True (r+1,q-1)&lt;br /&gt;
                     [(m,()) | p &amp;lt;- px, &lt;br /&gt;
                               let s = div (r+p) p * p,  m &amp;lt;- [s,s+p..q-1]] )]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
с использованием канонических функций &amp;lt;code&amp;gt;minus&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;union&amp;lt;/code&amp;gt;&amp;lt;ref&amp;gt;Функции из модуля [http://hackage.haskell.org/packages/archive/data-ordlist/0.4.4/doc/html/Data-List-Ordered.html Data.List.Ordered] {{Wayback|url=http://hackage.haskell.org/packages/archive/data-ordlist/0.4.4/doc/html/Data-List-Ordered.html |date=20111001050737 }}&amp;lt;/ref&amp;gt;):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
union (x:xs) (y:ys) = case compare x y of&lt;br /&gt;
         LT -&amp;gt; x : union  xs (y:ys)&lt;br /&gt;
         EQ -&amp;gt; x : union  xs    ys&lt;br /&gt;
         GT -&amp;gt; y : union (x:xs) ys&lt;br /&gt;
union a b = a ++ b&lt;br /&gt;
minus (x:xs) (y:ys) = case compare x y of&lt;br /&gt;
         LT -&amp;gt; x : minus  xs (y:ys)&lt;br /&gt;
         EQ -&amp;gt;     minus  xs    ys&lt;br /&gt;
         GT -&amp;gt;     minus (x:xs) ys&lt;br /&gt;
minus a b = a&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Описание игральных карт ===&lt;br /&gt;
Простой пример использования [[Алгебраический тип данных|алгебраических типов данных]] для описания игральных карт. Идентификаторы типов начинаются с заглавных букв. Идентификаторы переменных и функций — со строчных. Новые алгебраические типы определяются ключевым словом &amp;lt;code&amp;gt;data&amp;lt;/code&amp;gt;. Синонимы типов определяются ключевым словом &amp;lt;code&amp;gt;type&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;-- Алгебраический тип-сумма Масть («перечисление»).&lt;br /&gt;
-- Значением типа Масть может быть одно из указанных справа&lt;br /&gt;
-- (или Пики, или Трефы, или Бубны, или Червы).&lt;br /&gt;
-- «Масть» здесь выступает конструктором _типа_,&lt;br /&gt;
-- а «Пики», «Трефы» и т.д. — конструкторами _данных_.&lt;br /&gt;
data Масть = Пики | Трефы | Бубны | Червы&lt;br /&gt;
  -- необязательное автоматическое выведение экземпляров классов,&lt;br /&gt;
  -- позволяющее преобразовывать значения в строки (функцией show из Show)&lt;br /&gt;
  -- и обратно (функцией read из Read), а также сравнивать их между собой&lt;br /&gt;
  -- (функциями классов Eq и Ord).&lt;br /&gt;
  deriving (Show, Read, Eq, Ord)&lt;br /&gt;
&lt;br /&gt;
-- Алгебраический тип-сумма Достоинство&lt;br /&gt;
data Достоинство = Семёрка | Восьмёрка | Девятка | Десятка&lt;br /&gt;
                 | Валет | Дама | Король | Туз&lt;br /&gt;
  deriving (Show, Read, Eq, Ord)&lt;br /&gt;
&lt;br /&gt;
-- Алгебраический тип-произведение Карта («тип-кортеж»).&lt;br /&gt;
-- Значения типа Карта — комбинации значений типов Достоинство и Масть,&lt;br /&gt;
-- объединённые конструктором данных К.&lt;br /&gt;
-- Часто имена конструктора данных и конструктора типа совпадают.&lt;br /&gt;
data Карта = К Достоинство Масть&lt;br /&gt;
  deriving (Show, Read, Eq, Ord)&lt;br /&gt;
&lt;br /&gt;
-- Синоним списка значений типа Карта.&lt;br /&gt;
type Рука = [Карта]&lt;br /&gt;
&lt;br /&gt;
-- Функция, определяющая, есть ли в руке марьяж (король и дама одной масти).&lt;br /&gt;
естьМарьяж :: Рука -&amp;gt; Bool&lt;br /&gt;
естьМарьяж карты =&lt;br /&gt;
   -- достаточно найти марьяж хотя бы одной масти&lt;br /&gt;
   any (естьМарьяжМасти) [Пики, Трефы, Бубны, Червы]&lt;br /&gt;
   where&lt;br /&gt;
     -- проверить, есть ли и дама, и король заданной масти м в руке&lt;br /&gt;
     естьМарьяжМасти м = (К Дама м) `elem` карты &amp;amp;&amp;amp; (К Король м) `elem` карты&lt;br /&gt;
&lt;br /&gt;
-- примеры раздач&lt;br /&gt;
рука = [ К Дама Трефы, К Семёрка Червы, К Король Трефы, К Туз Бубны ]&lt;br /&gt;
рука_без_марьяжа = [ К Десятка Пики, К Король Пики, К Дама Червы ]&lt;br /&gt;
&lt;br /&gt;
main = do&lt;br /&gt;
  проверить рука&lt;br /&gt;
  проверить рука_без_марьяжа&lt;br /&gt;
  проверить [] -- пустая раздача&lt;br /&gt;
  where&lt;br /&gt;
    проверить кк = putStrLn ( (show кк) ++ &amp;quot; -&amp;gt; &amp;quot; ++ (show (естьМарьяж кк)) )&lt;br /&gt;
&lt;br /&gt;
-- Вывод:&lt;br /&gt;
-- [К Дама Трефы,К Семёрка Червы,К Король Трефы,К Туз Бубны] -&amp;gt; True&lt;br /&gt;
-- [К Десятка Пики,К Король Пики,К Дама Червы] -&amp;gt; False&lt;br /&gt;
-- [] -&amp;gt; False&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Численное интегрирование ===&lt;br /&gt;
Численное интегрирование &amp;lt;math&amp;gt;\int\limits_0^{2\pi}x\sin x\,{\rm d}x = -2\pi&amp;lt;/math&amp;gt; методом трапеций:&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;trapezeIntegrate f a b n =&lt;br /&gt;
    ((sum $ map f [a + h, a + 2*h .. b - h]) + t) * h&lt;br /&gt;
    where&lt;br /&gt;
        t = (f a + f b)/2&lt;br /&gt;
        h = (b - a) / n&lt;br /&gt;
&lt;br /&gt;
main = do&lt;br /&gt;
    print $ trapezeIntegrate (\x -&amp;gt; x*sin x) 0 (2*pi) 100&lt;br /&gt;
&lt;br /&gt;
-- Вывод: -6.281118086046067&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Проверка палиндромов ===&lt;br /&gt;
В примере ниже демонстрируется работа со строками в [[Юникод]]е.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;haskell&amp;quot;&amp;gt;&lt;br /&gt;
import Data.Char (toLower, isAlpha)&lt;br /&gt;
&lt;br /&gt;
palindrom :: [Char] -&amp;gt; Bool&lt;br /&gt;
palindrom s =&lt;br /&gt;
    norm == reverse norm&lt;br /&gt;
    where norm = map toLower $ filter isAlpha $ s&lt;br /&gt;
&lt;br /&gt;
test :: [Char] -&amp;gt; IO ()&lt;br /&gt;
test s =&lt;br /&gt;
    putStrLn $ s ++ &amp;quot;: &amp;quot; ++ show (palindrom s)&lt;br /&gt;
&lt;br /&gt;
main = do&lt;br /&gt;
    test &amp;quot;А в Енисее — синева&amp;quot;&lt;br /&gt;
    test &amp;quot;А роза упала на лапу Азора&amp;quot;&lt;br /&gt;
    test &amp;quot;Не роза упала на лапу Азора&amp;quot;&lt;br /&gt;
    test &amp;quot;Мир как Рим&amp;quot;&lt;br /&gt;
    test &amp;quot;Мир не Рим&amp;quot;&lt;br /&gt;
    test &amp;quot;I prefer Pi&amp;quot;&lt;br /&gt;
    test &amp;quot;حوت فمه مفتوح&amp;quot;&lt;br /&gt;
    test &amp;quot;Ne mateno, bone tamen&amp;quot;&lt;br /&gt;
&lt;br /&gt;
-- Вывод:&lt;br /&gt;
-- А в Енисее — синева: True&lt;br /&gt;
-- А роза упала на лапу Азора: True&lt;br /&gt;
-- Не роза упала на лапу Азора: False&lt;br /&gt;
-- Мир как Рим: True&lt;br /&gt;
-- Мир не Рим: False&lt;br /&gt;
-- I prefer Pi: True&lt;br /&gt;
-- حوت فمه مفتوح: True&lt;br /&gt;
-- Ne mateno, bone tamen: True&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Приложения, написанные на языке Haskell ==&lt;br /&gt;
&lt;br /&gt;
=== Коммерческие приложения ===&lt;br /&gt;
Язык получил некоторое распространение в коммерческой среде&amp;lt;ref&amp;gt;{{ref|en}}[http://www.haskell.org/haskellwiki/Haskell_in_industry Коммерческие применения языка Haskell] {{Wayback|url=http://www.haskell.org/haskellwiki/Haskell_in_industry |date=20170408084749 }}&amp;lt;/ref&amp;gt;, чему, в частности, способствовала принятая в сообществе традиция выпускать библиотеки под либеральными лицензиями (более 70 % свободно доступных библиотек распространяются на условиях лицензий BSD, MIT или являются общественным достоянием).&lt;br /&gt;
&lt;br /&gt;
Среди коммерческих проектов, реализованных на Haskell — Bluespec SystemVerilog ([[встраиваемый язык]] проектирования и верификации полупроводниковых схем, является расширением языка Haskell)&amp;lt;ref&amp;gt;{{Cite web |url=http://homepages.inf.ed.ac.uk/wadler/realworld/bluespec.html |title=Bluespec |access-date=2010-02-06 |archive-date=2010-02-06 |archive-url=https://web.archive.org/web/20100206121914/http://homepages.inf.ed.ac.uk/wadler/realworld/bluespec.html |url-status=live }}&amp;lt;/ref&amp;gt;, Cryptol (коммерческий язык для разработки и проверки криптографических алгоритмов, реализован на Haskell). Первое формально верифицированное микроядро [[L4 (микроядро)#seL4|seL4]] было тоже написано на Haskell.&lt;br /&gt;
&lt;br /&gt;
Haskell активно применяется в области финансового программирования, анализа рисков, в [[Система поддержки принятия решений|системах поддержки принятия решений]]. Haskell применяют разработчики генератора городских ландшафтов для игр и моделирования Gamr7&amp;lt;ref&amp;gt;{{Cite web |url=http://gamr7.com/ |title=Gamr7: UrbanPAD. The Software for 3D city &amp;amp; buildings creation. |access-date=2010-02-18 |archive-date=2010-02-16 |archive-url=https://web.archive.org/web/20100216202725/http://www.gamr7.com/ |url-status=live }}&amp;lt;/ref&amp;gt;. Есть примеры успешного применения языка для разработки частных информационных систем в коммерческих организациях (в том числе, в странах СНГ)&amp;lt;ref&amp;gt;{{статья&lt;br /&gt;
 |автор       = Астапов Дмитрий&lt;br /&gt;
 |заглавие = Использование Haskell при поддержке критически важной для бизнеса информационной системы&lt;br /&gt;
 |ссылка     = http://fprog.ru/2009/issue2/&lt;br /&gt;
 |издание   = Практика функционального программирования&lt;br /&gt;
 |тип           = Журнал&lt;br /&gt;
 |год           = 2009&lt;br /&gt;
 |номер       = 2&lt;br /&gt;
 |страницы = 53—69&lt;br /&gt;
 |archive-date      = 2010-02-13&lt;br /&gt;
 |archive-url       = https://web.archive.org/web/20100213041948/http://fprog.ru/2009/issue2/&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;. В аналитической СУБД {{iw|SQreamDB}} модуль синтаксического разбора [[SQL]] написан на Haskell.&lt;br /&gt;
&lt;br /&gt;
=== Приложения с открытым исходным кодом ===&lt;br /&gt;
Значительная часть библиотек и приложений с [[Открытое программное обеспечение|открытым исходным кодом]], написанных на Haskell, доступны в архиве Hackage. Среди них есть универсальный преобразователь различных форматов разметки [[Pandoc]], emacs-подобный текстовый редактор [[Yi (редактор)|Yi]] и [[интегрированная среда разработки]] [[Leksah]]. Среди системных разработок — распределённая система контроля версий [[Darcs]], операционная система [[House (операционная система)|House]], мозаичный менеджер окон&lt;br /&gt;
[[Xmonad]].&lt;br /&gt;
&lt;br /&gt;
Компилятор GHC часто выступает экспериментальной площадкой для проверки новых возможностей функционального программирования и оптимизации. При этом на Haskell написаны компиляторы языков [[Agda]], [[Curry]], {{iw|Epigram||en|Epigram (programming language)}}, а также первый компилятор и интерпретатор языка [[Perl 6]] Pugs (был создан всего за месяц).&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
{{примечания|2}}&lt;br /&gt;
&lt;br /&gt;
== Литература ==&lt;br /&gt;
* &#039;&#039;Bryan O’Sullivan, John Goerzen, Don Stewart&#039;&#039;. Real World Haskell — O’Reilly, 2008—710 °C. ISBN 0-596-51498-0. ISBN 978-0-596-51498-3&lt;br /&gt;
* {{книга&lt;br /&gt;
 |автор         = Душкин Роман Викторович.&lt;br /&gt;
 |часть         =&lt;br /&gt;
 |заглавие      = Функциональное программирование на языке Haskell&lt;br /&gt;
 |оригинал      =&lt;br /&gt;
 |ссылка        =&lt;br /&gt;
 |издание       =&lt;br /&gt;
 |ответственный = Гл. ред. Д. А. Мовчан;&lt;br /&gt;
 |место         = М.&lt;br /&gt;
 |издательство  = ДМК Пресс,&lt;br /&gt;
 |год           = 2008&lt;br /&gt;
 |том           =&lt;br /&gt;
 |страницы      =&lt;br /&gt;
 |страниц       = 544 с., ил.&lt;br /&gt;
 |серия         =&lt;br /&gt;
 |isbn          = 5-94074-335-8&lt;br /&gt;
 |тираж         = 1500&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;Graham Hutton&#039;&#039;. «Programming in Haskell». Cambrige University Press. ISBN 978-0-521-87172-3. ISBN 978-0-521-69269-4&lt;br /&gt;
* &#039;&#039;Kees Doets, Jan van Eijck&#039;&#039;. «The Haskell Road to Logic, Maths and Programming». ISBN 0-9543006-9-6.&lt;br /&gt;
&lt;br /&gt;
== Ссылки ==&lt;br /&gt;
{{викиучебник|Язык Haskell: О пользе и вреде лени}}&lt;br /&gt;
* {{url|haskell.org}} — основной сайт, посвящённый языку Haskell; содержит различные справочные материалы, список интерпретаторов и компиляторов Haskell (в настоящий момент, все интерпретаторы и компиляторы бесплатны). Кроме того, имеется обширный список ссылок на ресурсы по теории функционального программирования и другим языкам ([[Standard ML]], [[Clean]]).&lt;br /&gt;
&#039;&#039;&#039;Учебный и справочный материал&#039;&#039;&#039;&lt;br /&gt;
* [http://www.haskell.ru/ Полный перевод описания языка Haskell на русский язык].&lt;br /&gt;
* Сайт-книга [http://learnyouahaskell.com/ «Learn You a Haskell for Great Good!»].&lt;br /&gt;
* &#039;&#039;Роман Душкин&#039;&#039;. [https://web.archive.org/web/20041216080831/http://www.roman-dushkin.narod.ru/fp.html Курс лекций по функциональному программированию] (читается в [[МИФИ]] с 2001 года).&lt;br /&gt;
* &#039;&#039;Артём Гавриченков&#039;&#039;, &#039;&#039;Фёдор Сахаров&#039;&#039;. [https://web.archive.org/web/20131029203821/http://haskell.secsem.ru/2010/Lectures Спецкурс «Теория функционального программирования. Язык Haskell»] (лекции и презентации, прочитан на [[Факультет вычислительной математики и кибернетики МГУ|ВМиК МГУ]] в 2010 году)&lt;br /&gt;
* {{cite web&lt;br /&gt;
 |url         = http://www.rsdn.ru/article/haskell/haskell_part1.xml&lt;br /&gt;
 |title       = Мягкое введение в Haskell, часть 1&lt;br /&gt;
 |author      = Пол Хьюдак, Джон Петерсон, Джозеф Фасел&lt;br /&gt;
 |date        = 2007-03-03&lt;br /&gt;
 |work        = [[RSDN]]&lt;br /&gt;
 |publisher   = &lt;br /&gt;
 |access-date  = 2014-04-13&lt;br /&gt;
 |lang        = ru&lt;br /&gt;
}}; {{cite web&lt;br /&gt;
 |url         = http://rsdn.ru/article/haskell/haskell_part2.xml&lt;br /&gt;
 |title       = часть 2}}&lt;br /&gt;
* {{Cite web|url=https://github.com/denisshevchenko/ohaskell.guide|title=О Haskell по-человечески|author=Денис Шевченко|work=|date=|publisher=[[github]]}}&amp;lt;!-- Перевод книги на английский, в частности, рекомендовал (наряду с Learn you a Haskell for a Great Good и Gentle Introduction и своей The Haskell Road) Jan van Eijck см. http://homepages.cwi.nl/~jve/courses/14/fsa/lectures/JustWLH.pdf --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{{Трансляторы языка Haskell}}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Haskell]]&lt;br /&gt;
[[Категория:Языки программирования семейства Haskell]]&lt;br /&gt;
[[Категория:Языки программирования с автоматическим управлением памятью]]&lt;/div&gt;</summary>
		<author><name>31.181.80.100</name></author>
	</entry>
</feed>