Emacs haskell-mode中do块内if/then/else的Tab缩进失效求助
问题分析与解决
语法合法性
你的代码完全符合Haskell语法规范,并非非惯用写法,GHC可以正常编译执行。
问题根源
这个缩进无响应的问题大概率是haskell-mode的缩进配置未适配do块内if/then/else结构导致的,和语法无关。
解决办法
调整if结构缩进偏移量
在Emacs中执行M-x customize-variable haskell-indentation-ifte-offset,将该变量值设置为与do块内的缩进量一致(比如4空格),保存配置后重启haskell-mode即可生效。检查全局缩进配置
确认haskell-indentation-offset变量的值是你常用的缩进长度(比如4),该变量控制Haskell代码的基础缩进量,do块内的子句缩进基于此值计算。手动触发全局缩进
如果临时需要调整缩进,可以选中整个函数代码块,按下C-M-\(indent-region快捷键),让Emacs自动处理所有缩进。
可选的惯用写法
你的写法完全合法,不过也可以采用更紧凑的排版方式,这种写法通常更适配haskell-mode的缩进逻辑:
getCmd :: IO String getCmd = do c <- getChar if c == 'n' then return "next" else return "previous"
内容的提问来源于stack exchange,提问作者Patrick Bucher
相关产品推荐
相关产品推荐

