我必須錯過的東西,但我不明白爲什麼這個人爲的例子不工作:哈斯克爾嵌套讓拉姆達
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空間比它應該是。 – hammar