Настройка редакторов для поддержки Haskell - ruHaskell/ruhaskell GitHub Wiki
Для работы с Haskell достаточно текстового редактора и базовых навыков работы в терминале (для запуска компилятора и интерактивного интерпретатора, например). Но многие задаются вопросом, можно ли получить бо́льшую поддержку языка в любимом редакторе или среде разработки. Для таковых вопрошающих и создана эта страница.
Редакторы кода и интегрированные среды разработки:
-
Там предлагается пакет, тянущий за собой кучу тормозного и плохо совместимого говна. Лучше посмотрите сами на этот список и выберите, что вам интересно.
- Haskell mode - основной "режим", нужен всегда. Часто хватает одного этого пакета. Вы открываете хаскельный модуль, по нажатию клавиш загружаете его в запущенный "в фоне" GHCi и получаете подсветку ошибок, автодополнение, подсказки по типам.
- Расширенная поддержка Haskell с применением Haskell Language Server. Сам HLS проще всего установить с помощью ghcup.
Поддержка language servers как таковых обеспечивается одним из следующих пакетов (выбрать любой один!):
- lsp-mode, всплывающие окошки, посветка символа под курсором, всё включено по умолчанию, возможно потребуется отключить лишнее :)
- eglot, более "спокойная" реализация, использует в основном встроенные в Emacs возможности и привычные для пользователей Emacs паттерны, вроде показа типа выражения в mini-buffer, а не в виде вспплывающего окна.
-
IDE
- https://rikvdkleij.github.io/intellij-haskell/ (работает только с проектами, созданными с помощью Stack)
- http://haskforce.com/
После появления официального проекта haskell-language-server, реализующего интеграцию с редакторами по протоколу LSP, сделать из VSCode IDE для Haskell стало чуть проще:
- Первым делом необходимо установить из маркетплейса расширение Haskell, которое в качестве зависимости установит Haskell Syntax Highlighting. После открытия любого файла с кодом на Haskell расширение в автоматическом режиме определит системную версию GHC и скачает соответствующий бинарный файл
haskell-language-server-<version>-<os>-<ghc version>
и скриптhaskell-language-server-wrapper-<version>-<os>
. - Для автоформатирования кода можно установить Ormolu/Fourmolu, Brittany, Floskell или Stylish Haskell — выбрать форматтер можно в настройках VSCode.
- По желанию можно установить также плагин 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, и удалить их. После перезагрузки редактора скачаются файлы из наиболее актуального релиза.
Этот вариант установки требует наличия Nix и подходящей OS (желательно Ubuntu или macOS). Если повезет, можно достаточно быстро получить VSCodium (опенсорсный VS Code
) с необходимыми расширениями и инструментами в терминале для Haskell
и Nix
. Подробности установки - в репозитории.
- Vim page on haskell wiki - набор общих советов и список основных плагинов
-
ghc-mod - обертка для
ghc-mod
-
hdevtools - обертка для
hdevtools
- haskell-vim - набор полезных скриптов для NeoVim
- Есть привязка к Haskell IDE Engine:
- Ставим плагин Language Server Protocol, прописываем в настройках этого плагина путь к
hie
/hie-wrapper
согласно инструкции из README Haskell IDE Engine - запускаем
sublime
через стак, чтобыhie
увидел все нужные пакеты и бинарники, например, в корне проектаstack exec -- sublime .
(здесь есть более подробное объяснение этого приёма)
- Ставим плагин Language Server Protocol, прописываем в настройках этого плагина путь к
Geany отлично подходит для начала знакомства с Haskell. Сам редактор можно взять тут. Работает на Linux/Win/Mac. Сразу из коробки доступны:
- подсветка синтаксиса,
- сворачивание/разворачивание кода (folding),
- навигация по определениям внутри файла - go to definition, show usages, список определений на панели навигации (дерево),
- компиляция модуля по нажатию клавиши (F8) с последующим выводом ошибок в виде списка, подсветкой их же в коде,
Если воспользоваться hasktags и сгенерировать Ctags-совместимый tag file, то Geany научится навигации по определениям между модулями проекта (и между зависимостями).
В настройках команд для сборки можно указать cabal build
в качестве основного способа сборки. Если же установить в Geany плагин commander, то множно вытащить на панель инструментов и/или завязать на горячие клавиши произвольные команды вроде cabal run
, вызов линтера, вызов форматтера кода.
Отдельный проект коммерческой среды для Haskell, больше подходящей для изучения языка, чем в качестве IDE для полноценной разработки: http://haskellformac.com