Emacs Haskell缩进

Val*_*lev 23 emacs haskell indentation

请帮我在Emacs haskell-mode中设置适当的缩进

当我试图键入下来像ADT或记录,我按下后才能上错列<ENTER>,并按<TAB> 不会,直到我进入或者切换到合适的一个|或";"!

data MyADT = Oh
           | Hi
           | Hello
             | <- the cursor is here again!
Run Code Online (Sandbox Code Playgroud)

试图解决我设置的问题

(define-key global-map (kbd "RET") 'reindent-then-newline-and-indent)
Run Code Online (Sandbox Code Playgroud)

在我的.emacs文件中,但它也不会在按下时缩进当前行<enter>!

另一个奇怪的行为:缩进案例

oneChar c =  case lookup c simpleEscapes of
  | <- what? here?!
Run Code Online (Sandbox Code Playgroud)

Har*_*d L 9

这听起来像你打字<Enter>然后" |"然后<Tab>.如果我这样做,我会得到相同的结果.但是,如果我键入<Enter>然后<Tab>然后<Tab>再次自动插入" |"并将其正确排列,如下所示:

data MyADT = Oh
           | Hi
           |<Cursor>
Run Code Online (Sandbox Code Playgroud)

当我使用M-x eval-expression haskell-version <Enter>"v2_4" 检查我的haskell模式版本时.

Emacs haskell-mode没有完全分析源代码,因此我认为"自动"功能是近似的.<Tab>在新行上键入几次会循环显示几个可能的缩进,有时还会|为代数数据类型插入类似" "的文本.


Val*_*lev 3

我评论了该行

;;(add-hook 'haskell-mode-hook 'turn-on-haskell-indent)
Run Code Online (Sandbox Code Playgroud)

现在我得到了一个很好的“选项卡”行为:至少,它允许我选择一列,并且不会将我束缚在它喜欢的列上。但没有自动缩进让我有点烦恼,所以我希望这是一个临时解决方案