"Около полдюжины человек формально написали комбинаторную логику, и большинство из них, включая нас, допустили ошибки. Поскольку некоторые из наших приятелей-грешников относятся к наиболее аккуратным и компетентным логикам современности, мы рассматриваем данный факт как доказательство того, что ошибок трудно избежать. Таким образом, полнота описания необходима для точности, и чрезмерная краткость была бы здесь ложной экономией, даже больше, чем обычно."
Хаскелл Б. Карри (Haskell B. Curry) и Роберт Фейс (Robert Feys) в предисловии к Комбинаторной Логике [2], 31 мая 1956
В сентябре 1987 на конференции "Языки функционального программирования и компьютерная архитектура" (FPCA '87) в Портленде, штат Орегон, было организовано заседание для того, чтобы обсудить плачевную ситуацию, сложившуюся в сообществе функционального программирования: возникло более дюжины нестрогих чисто функциональных языков программирования, сходных в выразительной мощности и семантических основах. Участники встречи пришли к твердому мнению, что более широкому использованию этого класса функциональных языков препятствовало отсутствие общего языка. Было решено, что должен быть сформирован комитет для разработки такого языка, который обеспечил бы более быстрое средство связи новых идей, устойчивой основы для разработки реальных приложений и механизма поощрения других людей использовать функциональные языки. Этот документ описывает результат усилий этого комитета --- чисто функциональный язык программирования, названный Haskell , в честь логика Хаскелла Б. Карри (Haskell B. Curry), чей труд обеспечивает логическую основу для многих наших работ.
Основная цель комитета заключалась в разработке языка, который удовлетворял бы следующим требованиям:
Комитет планировал, что Haskell послужит основой для будущего исследования в разработке языков, и выражал надежду, что появятся расширения или варианты языка, включая экспериментальные функциональные возможности.
Haskell действительно непрерывно развивался с тех пор, как было опубликовано его первоначальное описание. К середине 1997 было выполнено четыре итерации в разработке языка (самая последняя на тот момент --- Haskell 1.4). В 1997 на семинаре по Haskell в Амстердаме было решено, что необходим стабильный вариант Haskell , этот стабильный вариант языка является темой настоящего описания и называется "Haskell 98".
Haskell 98 задумывался как относительно незначительная модификация Haskell 1.4, выполненная за счет некоторых упрощений и удаления некоторых подводных камней. Он предназначен играть роль "стабильного" языка в том смысле, что разработчики выполняют поддержку Haskell 98 в точности с его спецификацией, для обеспечения предсказуемости в будущем.
Первоначальное описание Haskell описывало только язык и стандартную библиотеку, названную Prelude. К тому времени, когда Haskell 98 был признан стабильной версией, стало ясно, что многим программам необходим доступ к большому набору библиотечных функций (особенно это касается ввода - вывода и взаимодействия с операционной системой). Если эта программа должна быть переносимой, набор библиотек также должен быть стандартизирован. Поэтому отдельный комитет (в который входили некоторые из членов комитета по разработке языка) начал вносить исправления в библиотеки Haskell 98.
Описания языка Haskell 98 и библиотек были опубликованы в феврале 1999.
Через год или два было выявлено много типографских ошибок и погрешностей. Я взялся собирать и выполнять эти исправления со следующими целями:
Этот документ является результатом описанного процесса усовершенствования. Он включает и описание языка Haskell 98, и описание библиотек и составляет официальную спецификацию обоих. Он не является учебным пособием по программированию на Haskell , как краткий вводный курс "Gentle Introduction" [6], и предполагает некоторое знакомство читателя с функциональными языками.
Полный текст обоих описаний доступен в режиме онлайн (см. ниже "Ресурсы Haskell ").
Haskell продолжает развиваться и сильно продвинулся дальше Haskell 98. Например, на момент написания этого документа имеются реализации Haskell , которые поддерживают:
и многое другое. Haskell 98 не препятствует этим разработкам. Вместо этого, он обеспечивает стабильную контрольную точку, чтобы те, кто хочет писать учебники или использовать Haskell для обучения, мог осуществить задуманное, зная, что Haskell 98 продолжит существование.
Web-сайт Haskell
http://haskell.org
предоставляет доступ ко многим полезным ресурсам, включая:
Haskell создан и продолжает поддерживаться активным сообществом исследователей и прикладных программистов. Те, кто входил в состав комитетов по языку и библиотекам, в частности, посвятили огромное количество времени и энергии языку. Их имена, а также присоединившиеся к ним на тот период организации перечислены ниже:
Кроме того, множество других людей внесли свой вклад, некоторые --- небольшой, но многие --- существенный. Это следующие люди: Kris Aerts, Hans Aberg, Sten Anderson, Richard Bird, Stephen Blott, Tom Blenko, Duke Briscoe, Paul Callaghan, Magnus Carlsson, Mark Carroll, Manuel Chakravarty, Franklin Chen, Olaf Chitil, Chris Clack, Guy Cousineau, Tony Davie, Craig Dickson, Chris Dornan, Laura Dutton, Chris Fasel, Pat Fasel, Sigbjorn Finne, Michael Fryers, Andy Gill, Mike Gunter, Cordy Hall, Mark Hall, Thomas Hallgren, Matt Harden, Klemens Hemm, Fergus Henderson, Dean Herington, Ralf Hinze, Bob Hiromoto, Nic Holt, Ian Holyer, Randy Hudson, Alexander Jacobson, Patrik Jansson, Robert Jeschofnik, Orjan Johansen, Simon B. Jones, Stef Joosten, Mike Joy, Stefan Kahrs, Antti-Juhani Kaijanaho, Jerzy Karczmarczuk, Wolfram Kahl, Kent Karlsson, Richard Kelsey, Siau-Cheng Khoo, Amir Kishon, Feliks Kluzniak, Jan Kort, Marcin Kowalczyk, Jose Labra, Jeff Lewis, Mark Lillibridge, Bjorn Lisper, Sandra Loosemore, Pablo Lopez, Olaf Lubeck, Ian Lynagh, Christian Maeder, Ketil Malde, Simon Marlow, Michael Marte, Jim Mattson, John Meacham, Sergey Mechveliani, Gary Memovich, Randy Michelsen, Rick Mohr, Andy Moran, Graeme Moss, Henrik Nilsson, Arthur Norman, Nick North, Chris Okasaki, Bjarte M. Ostvold, Paul Otto, Sven Panne, Dave Parrott, Ross Paterson, Larne Pekowsky, Rinus Plasmeijer, Ian Poole, Stephen Price, John Robson, Andreas Rossberg, George Russell, Patrick Sansom, Michael Schneider, Felix Schroeter, Julian Seward, Nimish Shah, Christian Sievers, Libor Skarvada, Jan Skibinski, Lauren Smith, Raman Sundaresh, Josef Svenningsson, Ken Takusagawa, Satish Thatte, Simon Thompson, Tom Thomson, Tommy Thorn, Dylan Thurston, Mike Thyer, Mark Tullsen, David Tweed, Pradeep Varma, Malcolm Wallace, Keith Wansbrough, Tony Warnock, Michael Webber, Carl Witty, Stuart Wray и Bonnie Yantis.
Наконец, кроме важной основополагающей работы Россера (Rosser), Карри (Curry) и других, положенной в основу лямбда-исчисления, будет правильным признать влияние многих заслуживающих внимания языков программирования, разработанных за эти годы. Хотя трудно точно определить происхождение многих идей, следующие языки были особенно важны: Lisp (и его современные воплощения Common Lisp и Scheme), ISWIM Ландина (Landin), APL, FP[1] Бэкуса (Backus), ML и Standard ML, Hope и Hope +, Clean, Id, Gofer, Sisal и ряд языков Тернера (Turner), завершившиеся созданием Miranda (Miranda является торговой маркой Research Software Ltd.). Без этих предшественников Haskell был бы невозможен.
Саймон Пейтон Джонс (Simon Peyton Jones)
Кембридж, сентябрь 2002