раздел 21

Haskell

Чистые функции, типы как доказательства, ленивость. Учит думать иначе.

55 уроков55 тем · 9 кластеров

Начать раздел
Хочу пройти

Без входа у каждого урока видно начало. Войди, чтобы читать целиком, отмечать пройденное и решать задачи. войти

Уроки раздела в премиуме: 1 200 ₽ в месяц или 10 000 ₽ в год. Оплата пока не подключена, доступ открывается промокодом. ввести промокод

Мастерская: Интерпретатор lishp

этапов 0 из 11

Уроки раздела

Фундамент языка

  1. Зачем Haskell. GHCup, cabal и первая программаJ~40 минпремиум
  2. Выражения, типы и функцииJ~35 минпремиум
  3. Списки и рекурсияJ~55 минпремиум
  4. Функции высшего порядкаJ~30 минпремиум
  5. Свёртки всерьёз: foldr, foldl и foldl'M~35 минпремиум
  6. Алгебраические типы и моделирование доменаM~55 минпремиум
  7. Типоклассы: класс, инстанс, deriving и законыM~45 минпремиум
  8. Модель вычислений: thunk, WHNF и ленивостьMS~45 минпремиум

Иерархия абстракций

  1. Semigroup и Monoid: склейка с законамиM~40 минпремиум
  2. Functor: применить функцию внутри обёрткиM~35 минпремиум
  3. Applicative: обёрнутая функция и валидацияMS~40 минпремиум
  4. Monad: зависимые шаги и do-нотацияMS~40 минпремиум
  5. Foldable и Traversable: обход с эффектомMS~40 минпремиум
  6. IO: do для мира и чистое ядроM~35 минпремиум

Проект 1 · свой Lisp

Изделие «Интерпретатор lishp», крейт lishp

  1. Архитектура интерпретатора: read, eval, printMS~45 минпремиум
  2. Парсер-комбинаторы с нуля, потом megaparsecS~35 минпремиум
  3. Ридер: слова в значения, гомоиконность и quoteS~40 минпремиум
  4. Первый eval: диспетчеризация по голове и бинарное ядроMS~30 минпремиум
  5. Ошибки как значения: EvalError и ExceptTS~35 минпремиум
  6. Спец-формы как значения: quote, eval, car, cdr, consMS~30 минпремиум
  7. Состояние и окружения: IORef, фреймы, def и set!S~35 минпремиум
  8. Функции, замыкания, currying и dambdaS~30 минпремиум
  9. Макросы как fexpr: expand-macro и раскрытие до упораS~30 минпремиум
  10. Стандартная библиотека на самом языкеS~35 минпремиум
  11. Финал: load, CLI на optparse-applicative, REPL на haskelineS~30 минпремиум

Проект 2 · генератор блога

  1. EDSL для HTML: типы как граница безопасностиM~35 минпремиум
  2. Свой парсер разметки без библиотекMS~30 минпремиум
  3. Склейка: конвертация, обход каталогов и CLIMS~50 минпремиум
  4. Проект как пакет: cabal, Haddock, PVPM~30 минпремиум
  5. Тестирование: hspec, QuickCheck и golden-тестыMS~35 минпремиум
  6. Строки по-взрослому и производительностьS~35 минпремиум

Рантайм и экосистема

  1. Ленивость в боюS~60 минпремиум
  2. Структуры данных: containers и vectorMS~55 минпремиум
  3. Исключения и ресурсыS~55 минпремиум
  4. Конкурентность и STMS~55 минпремиум
  5. GHC изнутриL~50 минпремиум

Эффекты, трансформеры, type-level

  1. Reader, Writer, StateMS~45 минпремиум
  2. Монадные трансформерыS~45 минпремиум
  3. mtl-стиль и ReaderT-паттернS~40 минпремиум
  4. Type-level HaskellL~70 минпремиум
  5. Карта эффект-системL~70 минпремиум

Проект 3 · Servant-бэкенд

  1. Моделируем домен проката настолокS~35 минпремиум
  2. Servant: API как типS~25 минпремиум
  3. База: persistent и esqueletoS~30 минпремиум
  4. Архитектура приложения: Env и ReaderTS~25 минпремиум
  5. Аутентификация и ролиS~25 минпремиум
  6. Тестирование сервераS~25 минпремиум
  7. В прод: Docker, миграции, метрикиL~25 минпремиум

Optics и advanced type-level

  1. Optics: Lens, Prism, TraversalL~25 минпремиум
  2. Advanced type-levelL~25 минпремиум

Functional DDD на Haskell

  1. Доменные типы на Haskell: newtype, скрытый конструктор, smart-конструкторыS~70 минпремиум
  2. Decider на Haskell: decide, evolve, replay и явное времяS~70 минпремиум
  3. Event store на Postgres: STM, postgresql-simple, оптимистичная блокировкаS~60 минпремиум
  4. Проекции и CQRS на STM: чистый фолд, forkIO, снимок в TVarL~60 минпремиум

Эффекты, трансформеры, type-level

  1. Нужна ли тебе эффект-система: зависимости в обычном IOS~45 минпремиум

Понятия курса

Понятия разобраны внутри уроков. Нажми на понятие, чтобы открыть урок, где оно объясняется.

Фундамент языка

Иерархия абстракций

Проект 1 · свой Lisp

Проект 2 · генератор блога

Рантайм и экосистема

Эффекты, трансформеры, type-level

Проект 3 · Servant-бэкенд

Optics и advanced type-level

  • Advanced type-levelClosed и open type families, TypeFamilyDependencies, GHC.Generics изнутри, singletons и dependent Haskell teaser, разбираем кусок внутренностей Servant.урок 50 · Advanced type-level
  • Optics: Lens, Prism, TraversalLens, Prism, Traversal и их законы, van Laarhoven-кодировка на пальцах, generic-lens, пакет lens против optics, рефакторим доступ к Env проекта 3.урок 49 · Optics: Lens, Prism, Traversal

Functional DDD на Haskell