Emacs的Haskell缩进模式之间有什么异同?
通过仔细检查文档 ,我了解到Emacs haskell-mode
提供了三种不同的自动缩进方法。 它们被称为haskell-indentation
, haskell-indent
和haskell-simple-indent
。 任何人都可以解释这些方法是如何相似,他们是如何不同? 我不仅对个别特征感兴趣,而且对一个事实上的标准感兴趣,或者不再维护一个或两个标准。
实际上,据我所知,从人们的angular度来讲,没有事实上的标准,人们对于他们所喜欢的有强烈的意见,但除了“在大多数情况下对我很有用”之外,没有什么具体的证据。
haskell-indentation
包和haskell-indent
包是最受欢迎的:
- 都有一个标签周期
- 两者都是复杂的代码库
- 都有很多边缘情况下,他们分解
每个人都会在不同的情况下做正确的事情,但是再次,没有unit testing,没有真正的parsing器等等,只是作者碰巧想到的一些特殊情况,所以关于它们的文档和理解行为严谨意义上是稀疏的。 Haskell haskell-indentation
比Haskell haskell-indent
Haskell,但很多人会告诉你,包括我在内,你花了很多时间循环缩进来find合适的。
haskell-simple-indent
包没有Haskell的知识,只知道列alignment,没有Tab循环,有缩进和去缩进。 这是我使用的版本,因为在前面的模式中有上述边缘情况,有时可能会让人分心。
我认为在这样的图书馆里,除了轶事之外,很难描述他们之间的差异。 我会欢迎一些严格的比较(尽pipe花时间写更好的模式可能会更好)。
simple-indent
由我维护。 我不知道其他人的作者是否对维护有兴趣。
我相信你提到的3种模式对应于本文所描述的3种haskell模式,即:
-
haskell-indentation
== Tab循环 -
haskell-indent
==矩形区域 -
haskell-simple-indent
==alignment代码
但是,因为我不是100%确定的,所以当我回家的时候我会进一步研究。
haskell-indentation
和haskell-indent
是误导性的相似,都提供循环通过build议通过反复键入TAB,这是他们的主要特点国际海事组织。
然而, haskell-indent
绝对是我最喜欢的,主要是因为它会提出一些非常有用的完成:
- 在写完types签名后重复一个函数名称
- 为模式匹配重复一个函数名称
- 案例分支pipe道
我刚刚换了个环境,不得不重新设置emacs,并且错误地使用了haskell-indentation
,而男孩我错过了这些。 OTOH,你可能会发现一些完成烦人的; 更何况他们在某些情况下不起作用:如果你的function以下划线开始,或者(如果你是鸟追踪,则更糟)。