【发布时间】:2013-01-13 01:08:29
【问题描述】:
我必须错过一些东西,但我不明白为什么这个人为的例子不起作用:
test1 :: Int
test1 = let g = \s -> s + s
f = \u -> let h = \t -> t + t
h' = \v -> v + v
in g (h (h' u))
in f 1
ghci > 输入“h”时解析错误
但是,这个等价的部分没问题:
test2 :: Int
test2 = let g = \s -> s + s
f = \u -> let h = \t -> t + t; h' = \v -> v + v
in g (h (h' u))
in f 1
我认为这是我的语法问题,但我在 test1 中看不到任何错误。谢谢。
编辑: 感谢您指出找到问题的正确方法。 原来与 vim-haskellConceal 插件有关。我将代码复制粘贴到另一个编辑器中,然后切换回 vim 并注意到嵌套的 let-in 块中有不同的缩进。删除该插件后一切正常。
编辑: 我应该停止指责这个插件,因为我简单地阅读了它的代码,没有发现任何不合适的地方。也许vim7.3中的“隐藏”功能是根本原因。但我宁愿睡在温暖舒适的床上……
【问题讨论】:
-
无法复制,此处编译为复制粘贴。您是否曾在某处使用过标签?
-
问题是在隐藏功能激活的情况下,
->箭头仅显示为 1 个字符宽而不是 2 个字符。因此,当您在编辑器中将h'与h对齐时,h'行实际上缩进了 1 个空格。
标签: haskell syntax-error let