[英]haskell nested let in lambda
我必须错过一些东西,但我不明白为什么这个人为的例子不起作用:
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中的“隐藏”功能是根本原因。 但我宁愿去温暖舒适的床上......
它确实有效。 我刚刚运行该代码并得到了
~ % 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
)!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.