Подтвердить что ты не робот

Каковы наиболее важные абстракции в Haskell? Монады? Аппликативных?

Я хочу знать, какие библиотеки, функции и понятия я должен знать и как использовать. Monad и функции есть типичный пример, но есть и другие хорошие примитивы для использования в кодировании, такие как Arrows, Applicative,... Кто они?

btw, я хочу быть в курсе событий в мире Haskell, изучать новые концепции, как это делается?

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

4b9b3361

Ответ 1

Лучший способ начать ваш опыт Haskell - установить Платформа Haskell, в которой много важных библиотек, которые мы считаем важными.

Если вы посмотрите, какие абстракции отправляются в базовой системе, вы увидите некоторые вещи, которые стоит изучить:

И не забывайте о мощных инструментах:

Ответ 2

Основные библиотеки:

Общие библиотеки, ориентированные на данные:

Упакованные концепции, которые вы должны знать:

  • Monads, Monad Transformers (см. базу, mtl)
  • Аппликативный (см. базу)
  • Стрелки (см. базу)
  • Программная транзакционная память (stm)
  • Расширяемые исключения (в базе с ~ GHC 6.8)
  • Динамическое программирование в Haskell (см. Data.Typeable в базе)
  • Искры (легкие parallelism подсказки через parallel)
  • Concurrency (см. Control.Concurrent в базе)
  • Memoization (monad-memo, MemoTrie)

Полуперечисленные понятия:

Тестирование, бенчмаркинг и инфраструктура:

Внешние инструменты, помощники GHC, GHC

  • threadscope
  • alex (lexer)
  • happy (генератор синтаксического анализатора)
  • haddock (система документации)
  • Охват программы Haskell (HPC)
  • GHC, в котором содержится информация о таких вещах, как
    • Различные обратные концы
    • Профилирование
    • Отладка
    • Оптимизация
    • Расширения языка

Значения по типу

  • GADT
  • Типы Rank-N
  • экзистенциалы
  • Функциональные зависимости и семейство типов
  • Этот список можно продолжать и продолжать, но вы будете знать, где искать, если вы знаете выше.

Как оставаться в курсе событий в Haskell без запроса вопроса о переполнении стека:

  • Прочитайте документы, принятые ICFP и POPL
  • Прочитайте документы, отклоненные ICFP и POPL (если вы можете их найти)
  • Соединитесь в социальных сетях, Haskellers кажутся большими
    • Twitter (начните, следуя за тем, кто следует за Галуа или любым случайным Haskeller, которого вы знаете)
    • Reddit
    • Переполнение стека (напишите мне, если вам нужна ссылка)
  • Прочитайте блоги (связанные с reddit или planet.haskell.org)
  • Следуйте цепочкам сообщений haskell-cafe или IRC.
  • Посещайте рабочие недели Галуа в течение полувека.

Ответ 3

Я на самом деле набросал список/группировку связанных с Хаскелем вещей по их практическому значению некоторое время назад; это выглядит так:

Основы Haskell (необходимы для чего угодно)

  • Функции
  • Частичное приложение, currying
  • Рекурсия
  • Функции более высокого порядка
  • Алгебраические типы данных
  • Соответствие шаблону
  • Типы классов
  • Виды
  • функторы
  • монада IO

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

  • Монады
  • Monad Transformers
  • FFI
  • Лень/Строгость, BangPatterns и остальные
  • GADTs
  • TypeFamilies
  • FunctionalDependencies

Не обязательно, но, вероятно, полезно

  • Прикладное
  • Полиморфизм более высокого ранга
  • OverlappingInstances
  • Объективы и альтернативные системы записи (fcLabels и остальные)
  • Iteratees
  • Concurrent Haskell (forkIO, MVars,...)
  • Программная транзакционная память
  • TemplateHaskell
  • ПРАВИЛА

Внеклассное (потенциально увлекательное, но совершенно ненужное)