Форматировщик кода Haskell (стиль Fourmolu / Ormolu)

РазработчикТекст
Реклама · УДАЛИТЬ?

Или
Строки, длиннее этой длины, отмечены в отчёте (по умолчанию Fourmolu/Ormolu — 100).
Реклама · УДАЛИТЬ?

Гид

Форматировщик кода на Haskell (стиль Fourmolu / Ormolu)

Форматировщик кода Haskell (стиль Fourmolu / Ormolu)

Вставьте исходный Haskell-код и получите отформатированный код в детерминированном стиле, вдохновлённом Fourmolu/Ormolu — с постоянным расстоянием между операторами, сортированными директивами LANGUAGE, группированными импортами и нормализацией табуляции в пробелы. Все действия выполняются локально в вашем браузере, поэтому исходный код никогда не покидает вашей машины.

Как использовать

  1. Загрузите .hs файл или вставьте свой Haskell-код в поле ввода (используйте ссылку «Попробовать пример» для быстрого образца).
  2. Выберите размер отступа — 2 пробела (по умолчанию Fourmolu) или 4 пробела (по умолчанию Ormolu).
  3. Установите максимальную длину строки, используемую для выявления чрезмерно длинных строк в обзоре валидации (по умолчанию 100).
  4. Переключать Сортировать импорты, Сортировка и удаление дубликатов директив LANGUAGEи Сокращение пустых строк для соответствия стилю вашего проекта.
  5. Форматированный вывод появляется автоматически с подсветкой синтаксиса; используйте кнопку «Скопировать» или «Скачать», чтобы получить результат.

Возможности

  • Детерминированное расстояние — добавляет стандартные пробелы вокруг =, ::, ->, <-, =>, $, ++, операторов сравнения и комбинаторов Applicative / Monad, таких как <$>, <*>, >>=.
  • Директивы нормализации — перемещает каждую {-# LANGUAGE ... #-} директиву в начало файла, разделяет объединённые директивы на одну директиву на строку, сортирует их по алфавиту и удаляет дубликаты.
  • Сортировка импортов — сортирует последовательные import выражения по алфавиту по имени модуля, сохраняя традицию группировки без квалификации и с квалификацией.
  • Безопасность форматирования — сохраняет начальный отступ пользователя (правило форматирования в Haskell имеет значение) при преобразовании табуляций в пробелы с использованием выбранного размера отступа.
  • Токенизатор, безопасный для комментариев — корректно обрабатывает строковые комментарии (--), вложенные блоки комментариев ({- ... -}), директивы, строки с экранированием и литералы символов, чтобы символы операторов внутри них не были искажены.
  • Проверка скобок и блоков — выделяет несбалансированные скобки, квадратные скобки, фигурные скобки и неоконченные блоки комментариев с номерами строк.
  • Отчёт о длинных строках Было добавлено 9 июня 2026 года
  • 100% клиентская сторона — ваш код обрабатывается полностью в браузере; ничего не загружается, не логируется и не хранится.

Часто задаваемые вопросы

  1. Какова разница между Ormolu и Fourmolu?

    Ormolu — это строгий, устоявшийся форматировщик Haskell с практически полной конфигурацией — каждый проект, форматированный Ormolu, выглядит одинаково. Fourmolu — это форк Ormolu, который предоставляет несколько настроек стиля (размер отступа, размещение запятых, использование ведущих/заключительных запятых, расстояние между фигурными скобками для записей), чтобы команды могли использовать единый стиль, отличный от upstream Ormolu. Оба используют одинаковый парсер и подход на основе AST, поэтому они генерируют надёжно валидный Haskell.

  2. Почему форматирование Haskell сложное для общих ИИ?

    Haskell использует правило «отступа» — отступы имеют семантическое значение и определяют, где начинаются и заканчиваются блоки, такие как let, where, do и case ... of. Форматировщик должен понимать дерево разбора, а не только поток токенов, чтобы безопасно переставить отступы без изменения смысла программы. Общие ИИ-модели анализируют код как текст и часто генерируют отступы, которые компилируются иначе, особенно в вложенных where-блоках и многострочных лямбдах.

  3. Что такое директива LANGUAGE?

    Директива LANGUAGE — это директива вида {-# LANGUAGE ExtensionName #-}, размещённая в начале файла Haskell, чтобы включить расширенные функции GHC для модуля — например, OverloadedStrings, ScopedTypeVariables или TypeApplications. Директивы могут объединяться ({-# LANGUAGE A, B, C #-}), но большинство руководств по стилю рекомендуют одну расширенную функцию на строку и сортировку по алфавиту для удобства сравнения изменений.

  4. Почему квалифицированные импорты обычно группируются отдельно?

    По традиции квалифицированные импорты (import qualified Data.Map as M) размещаются после обычных импортов (import Data.List), чтобы читатель мог сначала просмотреть не квалифицированные имена и сразу увидеть, какие модули используются через алиасы. Это форматирование используется по умолчанию stylish-haskell, Ormolu и Fourmolu, и оно уменьшает локализацию конфликтов при добавлении или удалении алиасов в проекте.

Хотите убрать рекламу? Откажитесь от рекламы сегодня

Установите наши расширения

Добавьте инструменты ввода-вывода в свой любимый браузер для мгновенного доступа и более быстрого поиска

в Расширение Chrome в Расширение края в Расширение Firefox в Расширение Opera

Табло результатов прибыло!

Табло результатов — это интересный способ следить за вашими играми, все данные хранятся в вашем браузере. Скоро появятся новые функции!

Реклама · УДАЛИТЬ?
Реклама · УДАЛИТЬ?
Реклама · УДАЛИТЬ?

новости с техническими моментами

Примите участие

Помогите нам продолжать предоставлять ценные бесплатные инструменты

Купи мне кофе
Реклама · УДАЛИТЬ?