Haskell缩进风格

6

我发现我在缩进、换行等方面经常不一致。是否有官方或广泛遵循的指南来规定如何在Haskell中布局空白?请注意,我不是在询问什么是合法的;我正在询问什么是良好的实践,类似于if / else控制块的良好Haskell编码风格?,但更加普遍。我特别想知道人们在使用do-blocks、let-blocks、where-blocks和case语句时都做些什么,尤其是当这些东西嵌套在彼此或多个函数定义内部时。


1
在Wikibooks上的缩进应该涵盖了您所寻找的内容。 - David Cain
13
这里有一份不错的Haskell通用风格指南,包括缩进:https://github.com/tibbe/haskell-style-guide/blob/master/haskell-style.md。 - hammar
1
@David:这是关于法律问题,而不是良好实践的问题。 - Mohan
如果那不是一条评论,我会把Hammar的评论发布为答案。SE需要在评论旁边添加一个“将评论提升为答案”的按钮。 - Joachim Breitner
这个问题可能会对你有兴趣。链接:https://dev59.com/WWw15IYBdhLWcg3wxuvL - Laar
1个回答

1
如果我可以挑剔一下的话,这是关于IT的内容。
我大多数时候喜欢Hammar的链接指南。但是,我真的不喜欢这种风格:
send :: Socket
     -> ByteString
     -> IO Int

我更喜欢

send ::
  Socket ->
  ByteString ->
  IO Int

在后一种风格中,参数和结果看起来不同(参数后面有->)。
我更喜欢这种方式。人们可能会有不同的意见,这主要是个人口味问题。可惜据我所知,Haddock似乎只支持前一种风格 :(

1
我也想知道每行80个字符的规则是否是考虑到需要在卡片上打印Haskell源代码的人而制定的。 - Ingo
@Ingo 在我看来,列限制更好地利用了空间。 我通常会在屏幕上并排放置几列文本。 - Heatsink
@Heatsink非常正确。但为什么是80?为什么不是72或96? - Ingo
2
我同样不喜欢这两种风格,但我还没有找到更好的选择。如果可能的话,我会避免一行中过宽的类型签名。 - C. A. McCann
共享代码的实际问题使第一种风格更可取。在审查第二种风格中的签名更改时,特别是添加新参数到签名末尾的更改,会出现比必要更多的差异行。我更喜欢第一种风格,并且它与列表、数据声明、模块导出和几个其他Haskell结构的首选风格一致。话虽如此,我在某种程度上也同意,即我也不喜欢完全包装签名(这将抛弃我的整个合并论点);) - Alain O'Dea

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接