Форматировщик кода Haskell (стиль Fourmolu / Ormolu)
Гид
Форматировщик кода Haskell (стиль Fourmolu / Ormolu)
Вставьте исходный Haskell-код и получите отформатированный код в детерминированном стиле, вдохновлённом Fourmolu/Ormolu — с постоянным расстоянием между операторами, сортированными директивами LANGUAGE, группированными импортами и нормализацией табуляции в пробелы. Все действия выполняются локально в вашем браузере, поэтому исходный код никогда не покидает вашей машины.
Как использовать
- Загрузите
.hsфайл или вставьте свой Haskell-код в поле ввода (используйте ссылку «Попробовать пример» для быстрого образца). - Выберите размер отступа — 2 пробела (по умолчанию Fourmolu) или 4 пробела (по умолчанию Ormolu).
- Установите максимальную длину строки, используемую для выявления чрезмерно длинных строк в обзоре валидации (по умолчанию 100).
- Переключать Сортировать импорты, Сортировка и удаление дубликатов директив LANGUAGEи Сокращение пустых строк для соответствия стилю вашего проекта.
- Форматированный вывод появляется автоматически с подсветкой синтаксиса; используйте кнопку «Скопировать» или «Скачать», чтобы получить результат.
Возможности
- Детерминированное расстояние — добавляет стандартные пробелы вокруг
=,::,->,<-,=>,$,++, операторов сравнения и комбинаторов Applicative / Monad, таких как<$>,<*>,>>=. - Директивы нормализации — перемещает каждую
{-# LANGUAGE ... #-}директиву в начало файла, разделяет объединённые директивы на одну директиву на строку, сортирует их по алфавиту и удаляет дубликаты. - Сортировка импортов — сортирует последовательные
importвыражения по алфавиту по имени модуля, сохраняя традицию группировки без квалификации и с квалификацией. - Безопасность форматирования — сохраняет начальный отступ пользователя (правило форматирования в Haskell имеет значение) при преобразовании табуляций в пробелы с использованием выбранного размера отступа.
- Токенизатор, безопасный для комментариев — корректно обрабатывает строковые комментарии (
--), вложенные блоки комментариев ({- ... -}), директивы, строки с экранированием и литералы символов, чтобы символы операторов внутри них не были искажены. - Проверка скобок и блоков — выделяет несбалансированные скобки, квадратные скобки, фигурные скобки и неоконченные блоки комментариев с номерами строк.
- Отчёт о длинных строках Было добавлено 9 июня 2026 года
- 100% клиентская сторона — ваш код обрабатывается полностью в браузере; ничего не загружается, не логируется и не хранится.
Часто задаваемые вопросы
-
Какова разница между Ormolu и Fourmolu?
Ormolu — это строгий, устоявшийся форматировщик Haskell с практически полной конфигурацией — каждый проект, форматированный Ormolu, выглядит одинаково. Fourmolu — это форк Ormolu, который предоставляет несколько настроек стиля (размер отступа, размещение запятых, использование ведущих/заключительных запятых, расстояние между фигурными скобками для записей), чтобы команды могли использовать единый стиль, отличный от upstream Ormolu. Оба используют одинаковый парсер и подход на основе AST, поэтому они генерируют надёжно валидный Haskell.
-
Почему форматирование Haskell сложное для общих ИИ?
Haskell использует правило «отступа» — отступы имеют семантическое значение и определяют, где начинаются и заканчиваются блоки, такие как let, where, do и case ... of. Форматировщик должен понимать дерево разбора, а не только поток токенов, чтобы безопасно переставить отступы без изменения смысла программы. Общие ИИ-модели анализируют код как текст и часто генерируют отступы, которые компилируются иначе, особенно в вложенных where-блоках и многострочных лямбдах.
-
Что такое директива LANGUAGE?
Директива LANGUAGE — это директива вида {-# LANGUAGE ExtensionName #-}, размещённая в начале файла Haskell, чтобы включить расширенные функции GHC для модуля — например, OverloadedStrings, ScopedTypeVariables или TypeApplications. Директивы могут объединяться ({-# LANGUAGE A, B, C #-}), но большинство руководств по стилю рекомендуют одну расширенную функцию на строку и сортировку по алфавиту для удобства сравнения изменений.
-
Почему квалифицированные импорты обычно группируются отдельно?
По традиции квалифицированные импорты (import qualified Data.Map as M) размещаются после обычных импортов (import Data.List), чтобы читатель мог сначала просмотреть не квалифицированные имена и сразу увидеть, какие модули используются через алиасы. Это форматирование используется по умолчанию stylish-haskell, Ormolu и Fourmolu, и оно уменьшает локализацию конфликтов при добавлении или удалении алиасов в проекте.
Установите наши расширения
Добавьте инструменты ввода-вывода в свой любимый браузер для мгновенного доступа и более быстрого поиска
恵 Табло результатов прибыло!
Табло результатов — это интересный способ следить за вашими играми, все данные хранятся в вашем браузере. Скоро появятся новые функции!
Подписаться на новости
все Новые поступления
всеОбновлять: Наш последний инструмент был добавлен 9 июня 2026 года
