Haskell 哈斯克尔缩进样式

Haskell 哈斯克尔缩进样式,haskell,coding-style,indentation,Haskell,Coding Style,Indentation,我发现我经常在缩进多少东西、在哪里放新行等方面不一致。。对于如何在Haskell中布局空白,是否有官方或广泛遵循的指导原则?请注意,我不是在问什么是合法的;我在问什么是好的实践,大致上是这样的,但更一般地说。我特别热衷于了解人们如何处理do块、let块、where块和case语句,尤其是当这些东西相互嵌套或嵌套在多个函数定义中时。如果可以的话,这是一个小小的挑剔 我最喜欢哈马尔的指导方针。但是,我真的不喜欢这种风格: send :: Socket -> ByteString

我发现我经常在缩进多少东西、在哪里放新行等方面不一致。。对于如何在Haskell中布局空白,是否有官方或广泛遵循的指导原则?请注意,我不是在问什么是合法的;我在问什么是好的实践,大致上是这样的,但更一般地说。我特别热衷于了解人们如何处理do块、let块、where块和case语句,尤其是当这些东西相互嵌套或嵌套在多个函数定义中时。

如果可以的话,这是一个小小的挑剔

我最喜欢哈马尔的指导方针。但是,我真的不喜欢这种风格:

send :: Socket
     -> ByteString
     -> IO Int
我更喜欢

send ::
  Socket ->
  ByteString ->
  IO Int
在后一种样式中,参数和结果看起来不同(参数后面有
->
s)


我更喜欢这个。人们可能不同意,这主要是个人品味的问题。不幸的是,afaik haddock似乎只支持前一种风格:(

Wikibooks上的内容应该涵盖您所寻找的内容。@David:这是关于什么是合法的,而不是什么是良好的做法。如果哈马尔的评论还不是评论,我会将其作为答案发布。SE需要“推广评论”来回答投票“注释旁边的按钮。您可能对这个问题感兴趣。我还想知道,对于需要在卡片上打印haskell源代码的人来说,是否存在每行80个字符的规则?@Ingo在我看来,列限制使用空间更好。我通常会在屏幕上并排放置几列文本。@Headsink非常正确。但为什么是80?为什么不是72还是96?我同样不喜欢这两种样式,但我还没有找到更好的选择。如果可能的话,我只是避免一行的类型签名太宽。对共享代码的实际考虑使第一种样式更可取。当查看第二种样式中的签名更改时,特别是在签名末尾添加新参数的更改,更多不必要的行出现在差异中。我更喜欢第一种样式,它与列表、数据声明、模块导出和其他几个Haskell构造的首选样式一致。也就是说,我部分同意,我也更喜欢根本不包装签名(这抛弃了我的整个合并参数);)