Haskell和Vim:正确的缩进

22
在SO上搜索“vim haskell indent”,有很多关于如何配置Vim进行Haskell缩进的答案。但它们都没有真正地“起作用”。它们不提供代码,如Haskell缩进维基页面所建议的那样。例如,在do或let块中语句的对齐,数据类型的=|等。
是否存在一种Vim解决方案可以生成像维基页面那样的代码?
1个回答

9
这可能不是你想要的答案,但有一种方法可以遵循缩进维基指南并与大多数编辑器兼容。
例如,do块
而不是
myFunc x = do y <- bar
              return $ x + y

您可以像这样缩进它。
myFunx x = do
    y <- bar
    return $ x + y

这在缩进维基中明确提到作为一种可接受的替代方案。

同样地,您可以格式化数据类型。

data FooBar
    = Foo
    | Bar
    | Asdf

守卫

myFunc x
    | x < 0     = 0
    | otherwise = x

Where子句

myFunc x = x + y + c where
    y = x + 5
    c = x * y

等等等等...

我个人开始使用这种风格是因为,像你说的那样,否则没有编辑器能够可靠地缩进代码。这在所有编辑器中都更有效,因为缩进始终是四的倍数(或您选择的其他基础缩进级别)。当我使用此样式时,我也开始更喜欢这种一致的缩进水平,因此即使编辑器变得更智能,我也不会回到这个点。


1
上,此时我怀疑使用vim的每个人都会达成这种妥协。我已经做了很长时间的变化。 - user1002430
这并不一定是妥协。除了 where 版本外,这是我眼中喜欢的风格(并且在小幅变化下,一直如此)。 - luqui

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