【问题标题】:What are the similarities and differences among Haskell indentation modes for Emacs?Emacs 的 Haskell 缩进模式有什么异同?
【发布时间】:2012-07-06 16:04:38
【问题描述】:

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

【问题讨论】:

  • 这不是官方 Emacs 发行版的一部分。如果你在这里没有得到答案,你最好直接联系包的作者。这三个选项的文档可以使用一些扩展。如果它是一个活动项目,您可能会为此提交一个错误。

标签: haskell emacs haskell-mode


【解决方案1】:

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

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

  • 两者都有一个制表符循环
  • 两者都是复杂的代码库
  • 两者都有很多崩溃的边缘情况

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

    但是,由于我不是 100% 确定,所以我回家后会进一步研究。

    【讨论】:

    • haskell-indent 和 haskell-indentation 都使用制表符循环。
    【解决方案3】:

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

    不过haskell-indent绝对是我的最爱,主要是因为它会提出一些非常有用的补全:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-11
      • 2011-05-23
      • 1970-01-01
      • 2013-08-09
      相关资源
      最近更新 更多