Описание тега haskell

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

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

Контрольный список

Чтобы не отвечать на одни и те же вопросы снова и снова, просмотрите список интересных вопросов и этот контрольный список:

Смешивание табуляции и пробелов

Очень много ошибок с упоминанием каких-то parse error on input...вызваны тем, что пользователь смешивает пробелы и табуляции в отступе, поэтому убедитесь, что это не так. Кроме того, вам, вероятно, следует настроить свой редактор для преобразования табуляции в пробелы.

Проблемы с проверкой типов при компиляции

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

Проблемы с производительностью

В случае проблем с производительностью убедитесь, что вы скомпилировали код с включенной оптимизацией. Проходящий-O2компилятору устраняет многие проблемы с производительностью. Интерпретатор GHC заметно медленнее, чем запуск двоичного файла, выведенного из компилятора GHC.

Также может быть полезно скомпилировать с -Wallчтобы наблюдать (среди прочего) места, где числовые типы по умолчанию устанавливаются с произвольной точностью Integer type, чтобы вы могли подумать, сойдет ли вам с рук использование более эффективной фиксированной точности Int тип.

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

Многие проблемы с производительностью новичков возникают из-за неправильного понимания того, что такое списки и как их можно эффективно использовать. В частности, они не являются массивами, но имеют ту же структуру, что и связанные списки в императивных языках:

data List a = Cons a (List a)
            | Empty

Понимая это [a] - вложенный (рекурсивный) алгебраический тип данных, важен для поддержки интуитивного понимания эффективности таких операций, как (:) против (++), (!!), length, так далее.

Идиоматическое и эффективное использование списков предполагает создание таких функций, как zip, map, filter, foldr, takeи т.д., многие из которых позволяют полностью исключить промежуточные списки.

Прелюдия String Тип реализован в виде списков:

type String = [Char]

Это очень удобное представление, но оно неэффективно с точки зрения памяти и не подходит для обработки текста, когда производительность является проблемой. Вместо этого text библиотеку следует использовать.

В bytestring- это столь же быстрый и эффективный высокоуровневый интерфейс вокруг строки (или потока) байтов. ВData.ByteString.Char8 модуль можно использовать для эффективного представления небольшого подмножества Unicode, например, когда ожидается только текст ASCII.

"Что такое функция foo / оператор #$*?"

Синтаксис Haskell очень прост в том смысле, что все (кроме нескольких ключевых слов) является просто библиотечной функцией 1, включая все инфиксные операторы. Эти функции можно легко найти,

  • Hayoo ищет идентификаторы и подписи по всей базе данных Hackage.
  • Hoogle также ищет идентификаторы и подписи, но работает только в том случае, если функция поступает из известного пакета.

Пожалуйста, сначала попробуйте эти движки, прежде чем задавать такой или тот или иной вопрос.

"Какую библиотеку я должен использовать для <thing>?"

Эти типы вопросов обычно не по теме, но вот несколько полезных ресурсов:

Начиная

  1. Загрузите платформу Haskell для своей платформы. Сюда входит современный компилятор Glasgow Haskell (GHC), а также общие инструменты и библиотеки для разработчиков.
  2. Ознакомьтесь с этими вопросами о переполнении стека со ссылками на популярные веб-сайты и руководства:
  3. Развлекайтесь и задавайте вопросы!

Интересные вопросы / ответы

Известные реализации Haskell

  • GHC: Glasgow Haskell Compiler, оптимизирующий компилятор для Haskell.
  • UHC: реализация Haskell от Утрехтского университета.
  • Hugs: некогда популярный интерпретатор Haskell, который больше не поддерживается. Большинство людей сейчас используют GHCi для интерактивной разработки.

Сообщество

Другие места для обсуждения Haskell, помимо формата вопросов и ответов stackru:

Бесплатные книги по программированию на Haskell

Книги по программированию на Haskell

Документы Haskell

Следующий список любезно предоставлен Gangadhar:

  1. Почему так важно функциональное программирование
  2. История Haskell
  3. Смотрите видео на Channel9, относящиеся к FP - хотя и не всегда академические
  4. Следуйте за LtU
  5. Вы не читали журнал FP, но в нем может быть полезная информация
  6. Монада Читатель
  7. Статья Саймона Пейтона Джонса о составлении контрактов хорошо читается, как и почти все из его статей и статей Филипа Вадлера.
  8. Typing Haskell in Haskell - реализация базовой системы типов Haskell в Haskell от Саймона Пейтона Джонса

Дополнительная информация


1 Технически правильнее было бы сказать, что все является значением библиотеки, потому что что-то вроде числовой константы илиIO действие на самом деле не является функцией.