39

通过仔细阅读文档,我了解到 Emacshaskell-mode提供了三种不同的、相互排斥的自动缩进方法。它们被称为haskell-indentationhaskell-indenthaskell-simple-indent。谁能解释这些方法的相似之处和不同之处?我不仅对单个功能感兴趣,而且对其中一个是否是事实上的标准或一两个不再维护感兴趣。

4

3 回答 3

19

真的,据我询问人们所知道的,没有事实上的标准,人们对他们更喜欢哪个有强烈的意见,但除了“它在大多数情况下对我有用”之外几乎没有具体的证据。

haskell-indentationhaskell-indent包是最受欢迎的:

  • 两者都有一个标签循环
  • 两者都是复杂的代码库
  • 两者都有很多边缘情况,它们会崩溃

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

haskell-simple-indent包没有 Haskell 知识,它只知道列对齐并且它没有制表符循环,它有缩进和去缩进。这是我使用的版本,因为上述模式中的边缘情况有时会让人分心。

我认为对于这样的库,除了轶事之外,很难描述它们之间的差异。我欢迎进行一些严格的比较(尽管时间可能会更好地用于编写更好的模式)。

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

于 2012-07-21T00:47:33.810 回答
2

我相信您提到的 3 种模式对应于本文中描述的 3 种 haskell 模式,即;

  • haskell-indentation== 标签单车
  • haskell-indent== 矩形区域
  • haskell-simple-indent== 对齐代码

但是,由于我不是 100% 确定,所以我回家后会调查更多。

于 2012-07-18T11:59:42.640 回答
0

haskell-indentation并且haskell-indent具有误导性的相似性,两者都通过重复键入 TAB 来提供循环提案,这是 IMO 的主要功能。

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

  • 在你写好类型签名后为你重复一个函数名
  • 重复用于模式匹配的函数名称
  • 案例分支管道

我最近刚刚切换了环境,不得不重新设置 emacs,并且haskell-indentation被错误地使用了,天哪,我错过了这些。OTOH,您可能会发现其中一些完成令人讨厌;更重要的是,它们在某些情况下不起作用:如果您的函数以下划线开头,或者(更糟)如果您正在追踪鸟类。

于 2014-10-17T18:12:13.487 回答