Emacs的Haskell缩进模式有什么相似之处和不同之处?

时间:2012-07-06 16:04:38

标签: haskell emacs haskell-mode

通过仔细检查the documentation,我了解到Emacs haskell-mode附带了三种不同的,相互排斥的自动缩进方法。它们被称为haskell-indentationhaskell-indenthaskell-simple-indent。谁能解释这些方法是如何相似的以及它们是如何不同的?我不仅对个别功能感兴趣,而且如果一个是事实上的标准,或者如果一个或两个不再维护,我感兴趣。

3 个答案:

答案 0 :(得分:19)

实际上,据我所知,人们没有事实上的标准,人们对自己喜欢的内容有强烈的意见,除了“在大多数情况下它对我有用”之外几乎没有具体的证据。

haskell-indentation包和haskell-indent包是最受欢迎的:

  • 都有一个标签周期
  • 两者都是复杂的代码库
  • 两个都有很多边缘情况可以分解

每个人都会在不同的情况下做正确的事情,但同样,没有单元测试,没有真正的解析器等等,只是作者碰巧想到的一堆特殊情况,所以文档和理解关于他们在严格意义上的表现如何是稀疏的。 haskell-indentationhaskell-indent更了解Haskell,但很多人会告诉你,包括我在内,你花了很多时间骑自行车缩进以找到正确的。

haskell-simple-indent包不知道Haskell,它只知道列对齐,它没有制表符循环,它有缩进和去缩进。这是我使用的版本,因为前面的模式中有上述边缘情况,有时可能会分散注意力。

我认为,对于这些图书馆来说,除了传闻之外,很难描述他们之间的差异。我会欢迎一些严格的比较(虽然花时间编写更好的模式可能会更好)。

simple-indent由我维护。我不知道其他人的作者是否对维护感兴趣。

答案 1 :(得分:2)

我相信你提到的3种模式对应于this article中描述的3种haskell模式,即;

  • haskell-indentation == Tab Cycling
  • haskell-indent ==矩形区域
  • haskell-simple-indent ==对齐代码

然而,由于我不是百分百肯定,所以当我回到家时,我会留意更多。

答案 2 :(得分:0)

haskell-indentationhaskell-indent具有误导性相似之处,两者都通过重复输入TAB提供循环提示,这是他们的主要特征IMO。

然而haskell-indent绝对是我最喜欢的,主要是因为它会提出一些非常有用的完成:

  • 在您编写了类型签名
  • 后为您重复了一个函数名称
  • 重复模式匹配的函数名称
  • 案例分支的管道

我最近刚刚切换环境,不得不重新设置emacs,并且错误地使用了haskell-indentation,而男孩我错过了这些。 OTOH,你可能会发现其中一些完成令人讨厌;在某些情况下他们不会做什么工作:如果你的功能以下划线开头,或者(如果你是鸟类跟踪)。