Haskell 表达式中哪里允许换行?

Where are line breaks allowed within Haskell expressions?

背景

大多数风格指南建议将行的长度控制在 79 个字符以内。在 Haskell 中,缩进规则意味着表达式经常需要换行。

问题:

在表达式中,在哪里换行是合法的?

这在某处记录了吗?


扩展问题:我看到 GHC 在报告错误时格式化了我的代码,因此有人想出了如何自动执行断开长行的过程。是否有一个实用程序可以将 haskell 代码放入其中并让它以良好的格式吐出该代码?

您可以在表达式的词汇标记之间的任意位置放置一个换行符。但是,在换行符后可以缩进多少是有限制的。简单的经验法则是将下一行缩进到包含表达式的行的右侧。除此之外,还有一些风格的东西:

  • 如果要缩进出现在定义 name = expression 中的表达式,缩进到 = 符号右侧是一种很好的风格。

  • 如果要缩进出现在 do 绑定或列表推导式右侧的表达式,最好在 [=13] 右侧缩进=] 符号.

权威文档可能是 Haskell 98 Report (Chapter 2 词法结构),但我个人认为 material 不是很容易阅读。