Я разрабатываю бэкенд на Haskell так, чтобы корректность обеспечивалась самим устройством программы, а не удачей на проде. Ставку делаю на ключевые черты языка: развитую статическую типизацию, чистоту вычислений и явное описание эффектов. Стоит описать предметную область алгебраическими типами и заставить компилятор отбраковывать невозможные состояния, как значительная часть ошибок времени выполнения исчезает ещё до запуска. Это не теория ради теории, а рабочий способ выпускать системы, которые ведут себя предсказуемо под нагрузкой и которые не страшно передавать другому инженеру для доработки.
Я создавал на Haskell веб-API, обработчики очередей, потоковые конвейеры данных и консольные утилиты. Свободно работаю с распространённым стеком: Servant и Yesod на вебе, STM и async для параллелизма, persistent и hasql для работы с базами, инструменты GHC, Cabal и Stack для сборки. Отдельно занимаюсь скоростью: снимаю профили штатными средствами GHC, аккуратно управляю ленивостью и строгостью, при необходимости перехожу на строгие структуры, распакованные векторы и стриминговые библиотеки, чтобы удерживать потребление памяти и повышать пропускную способность. Проверку свойств через QuickCheck использую как способ проектирования, а не как галочку.
В итоге вы получаете код, который работает на вас: компактные сочетаемые функции, понятная модульная структура и документация, пригодная для сопровождения командой. Я одинаково охотно поднимаю сервис с нуля и вливаюсь в действующий проект на Haskell — чтобы устранять дефекты, разбираться с техническим долгом, оптимизировать узкие места и помогать коллегам осваивать идиоматичный функциональный стиль. Когда важна система, которую безопасно развивать, я закрою эту задачу.
— Серверные HTTP-API на Servant и Yesod
— Описание домена алгебраическими типами и классами типов
— Параллелизм на STM, async и стримах
— Работа с базами через persistent, hasql и PostgreSQL
— Проверка свойств с QuickCheck и Hspec
— Профилирование, анализ строгости и оптимизация
— Сборка на GHC, Cabal, Stack и Nix
Я создавал на Haskell веб-API, обработчики очередей, потоковые конвейеры данных и консольные утилиты. Свободно работаю с распространённым стеком: Servant и Yesod на вебе, STM и async для параллелизма, persistent и hasql для работы с базами, инструменты GHC, Cabal и Stack для сборки. Отдельно занимаюсь скоростью: снимаю профили штатными средствами GHC, аккуратно управляю ленивостью и строгостью, при необходимости перехожу на строгие структуры, распакованные векторы и стриминговые библиотеки, чтобы удерживать потребление памяти и повышать пропускную способность. Проверку свойств через QuickCheck использую как способ проектирования, а не как галочку.
В итоге вы получаете код, который работает на вас: компактные сочетаемые функции, понятная модульная структура и документация, пригодная для сопровождения командой. Я одинаково охотно поднимаю сервис с нуля и вливаюсь в действующий проект на Haskell — чтобы устранять дефекты, разбираться с техническим долгом, оптимизировать узкие места и помогать коллегам осваивать идиоматичный функциональный стиль. Когда важна система, которую безопасно развивать, я закрою эту задачу.
— Серверные HTTP-API на Servant и Yesod
— Описание домена алгебраическими типами и классами типов
— Параллелизм на STM, async и стримах
— Работа с базами через persistent, hasql и PostgreSQL
— Проверка свойств с QuickCheck и Hspec
— Профилирование, анализ строгости и оптимизация
— Сборка на GHC, Cabal, Stack и Nix