Каковы наиболее важные абстракции в Haskell? Монады? Аппликативных?
Я хочу знать, какие библиотеки, функции и понятия я должен знать и как использовать. Monad и функции есть типичный пример, но есть и другие хорошие примитивы для использования в кодировании, такие как Arrows, Applicative,... Кто они?
btw, я хочу быть в курсе событий в мире Haskell, изучать новые концепции, как это делается?
(исходное название было: "Библиотечные примитивы для кодирования", но это было изменено)
Ответы
Ответ 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
- ПРАВИЛА
Внеклассное (потенциально увлекательное, но совершенно ненужное)