不喜欢广告? 无广告 今天

Haskell 代码格式化程序(Fourmolu / Ormolu 风格)

开发人员文本
广告 移除?

或者
超过此长度的行将在报告中被标记(Ormolu / Fourmolu 默认为 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 的布局规则具有语义重要性),同时使用选定的缩进宽度将制表符转换为空格。
  • 注释安全的词法分析器 ——正确处理行注释(--)、嵌套块注释({- ... -})、语句、带转义的字符串和字符字面量,以确保其中的运算符字符不会被错误处理。
  • 括号与块验证 ——标记未匹配的括号、方括号、大括号和未终止的块注释,并显示行号。
  • 长行报告 ——突出显示任何超过您配置的最大宽度的行,以便您在审查前进行重构。
  • 100% 客户端 ——您的代码完全在浏览器中处理;不会上传、记录或存储。

常问问题

  1. Ormolu 和 Fourmolu 有什么区别?

    Ormolu 是一个严格且有明确偏好的 Haskell 格式化工具,几乎没有任何配置——每个由 Ormolu 格式化的项目看起来都相同。Fourmolu 是 Ormolu 的一个分支,提供了少量风格调节选项(缩进大小、逗号位置、首尾逗号、记录大括号间距),适用于希望拥有与上游 Ormolu 不完全相同但又保持一致风格的团队。两者共享相同的解析器和基于 AST 的方法,因此都能生成可靠的 Haskell 代码。

  2. 为什么通用 AI 难以处理 Haskell 格式化?

    Haskell 使用“偏侧规则”——缩进具有语义重要性,决定了 let、where、do 和 case ... of 的块开始和结束位置。格式化工具必须理解解析树,而不仅仅是词法流,才能安全地重新缩进而不改变程序的含义。通用语言模型将代码视为文本进行推理,经常生成与输入不同的缩进,尤其是在处理嵌套 where 子句和多行 lambda 表达式时。

  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 默认的布局,当项目添加或移除限定别名时,也能将合并冲突局部化。

想要享受无广告的体验吗? 立即无广告

安装我们的扩展

将 IO 工具添加到您最喜欢的浏览器,以便即时访问和更快地搜索

添加 Chrome 扩展程序 添加 边缘延伸 添加 Firefox 扩展 添加 Opera 扩展

记分板已到达!

记分板 是一种有趣的跟踪您游戏的方式,所有数据都存储在您的浏览器中。更多功能即将推出!

广告 移除?
广告 移除?
广告 移除?

新闻角 包含技术亮点

参与其中

帮助我们继续提供有价值的免费工具

给我买杯咖啡
广告 移除?