Настройка редакторов для поддержки Haskell - ruHaskell/ruhaskell GitHub Wiki

Для работы с Haskell достаточно текстового редактора и базовых навыков работы в терминале (для запуска компилятора и интерактивного интерпретатора, например). Но многие задаются вопросом, можно ли получить бо́льшую поддержку языка в любимом редакторе или среде разработки. Для таковых вопрошающих и создана эта страница.

Содержание

Редакторы кода и интегрированные среды разработки:

Atom

  • Atom Haskell

    Там предлагается пакет, тянущий за собой кучу тормозного и плохо совместимого говна. Лучше посмотрите сами на этот список и выберите, что вам интересно.

Emacs

  • Haskell mode - основной "режим", нужен всегда. Часто хватает одного этого пакета. Вы открываете хаскельный модуль, по нажатию клавиш загружаете его в запущенный "в фоне" GHCi и получаете подсветку ошибок, автодополнение, подсказки по типам.
  • Расширенная поддержка Haskell с применением Haskell Language Server. Сам HLS проще всего установить с помощью ghcup.

Поддержка language servers как таковых обеспечивается одним из следующих пакетов (выбрать любой один!):

  • lsp-mode, всплывающие окошки, посветка символа под курсором, всё включено по умолчанию, возможно потребуется отключить лишнее :)
  • eglot, более "спокойная" реализация, использует в основном встроенные в Emacs возможности и привычные для пользователей Emacs паттерны, вроде показа типа выражения в mini-buffer, а не в виде вспплывающего окна.

IntelliJ IDEA

Visual Studio Code

После появления официального проекта haskell-language-server, реализующего интеграцию с редакторами по протоколу LSP, сделать из VSCode IDE для Haskell стало чуть проще:

  1. Первым делом необходимо установить из маркетплейса расширение Haskell, которое в качестве зависимости установит Haskell Syntax Highlighting. После открытия любого файла с кодом на Haskell расширение в автоматическом режиме определит системную версию GHC и скачает соответствующий бинарный файл haskell-language-server-<version>-<os>-<ghc version> и скрипт haskell-language-server-wrapper-<version>-<os>.
  2. Для автоформатирования кода можно установить Ormolu/Fourmolu, Brittany, Floskell или Stylish Haskell — выбрать форматтер можно в настройках VSCode.
  3. По желанию можно установить также плагин hlint (требует установки утилиты hlint).

Как вариант, можно использовать My Personal and Opinionated Haskell VS Code Setup in 2021 в качестве своеобразного гайда по настройке VS Code.

Решение возможных проблем

Если вдруг по какой-то причине вы замечаете, что в редакторе недоступна функциональность, которая есть в changelog haskell-language-server (вроде Evaluate), то проще всего найти расположение файлов haskell-language-server и haskell-language-server-wrapper, и удалить их. После перезагрузки редактора скачаются файлы из наиболее актуального релиза.

VSCodium

Этот вариант установки требует наличия Nix и подходящей OS (желательно Ubuntu или macOS). Если повезет, можно достаточно быстро получить VSCodium (опенсорсный VS Code) с необходимыми расширениями и инструментами в терминале для Haskell и Nix. Подробности установки - в репозитории.

Vim

NeoVim

  • haskell-vim - набор полезных скриптов для NeoVim

Sublime Text

  • Есть привязка к Haskell IDE Engine:
    • Ставим плагин Language Server Protocol, прописываем в настройках этого плагина путь к hie/hie-wrapper согласно инструкции из README Haskell IDE Engine
    • запускаем sublime через стак, чтобы hie увидел все нужные пакеты и бинарники, например, в корне проекта stack exec -- sublime . (здесь есть более подробное объяснение этого приёма)

Geany

Geany отлично подходит для начала знакомства с Haskell. Сам редактор можно взять тут. Работает на Linux/Win/Mac. Сразу из коробки доступны:

  • подсветка синтаксиса,
  • сворачивание/разворачивание кода (folding),
  • навигация по определениям внутри файла - go to definition, show usages, список определений на панели навигации (дерево),
  • компиляция модуля по нажатию клавиши (F8) с последующим выводом ошибок в виде списка, подсветкой их же в коде,

Если воспользоваться hasktags и сгенерировать Ctags-совместимый tag file, то Geany научится навигации по определениям между модулями проекта (и между зависимостями).

В настройках команд для сборки можно указать cabal build в качестве основного способа сборки. Если же установить в Geany плагин commander, то множно вытащить на панель инструментов и/или завязать на горячие клавиши произвольные команды вроде cabal run, вызов линтера, вызов форматтера кода.

Haskell for Mac

Отдельный проект коммерческой среды для Haskell, больше подходящей для изучения языка, чем в качестве IDE для полноценной разработки: http://haskellformac.com

⚠️ **GitHub.com Fallback** ⚠️