0

我必须错过一些东西,但我不明白为什么这个人为的例子不起作用:

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中的“隐藏”功能是根本原因。但我宁愿去我温暖舒适的床...

4

1 回答 1

2

它确实有效。我刚刚运行了该代码并得到了

~ % ghci Hello.hs 
GHCi, version 7.4.1: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main             ( Hello.hs, interpreted )
Ok, modules loaded: Main.
*Main> test1 
8
*Main> 

换句话说,请确保您\t的代码中没有任何制表符 ( )!

于 2013-01-13T01:12:07.457 回答