繁体   English   中英

haskell嵌套在lambda中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM