Haskell 哈斯克尔多线Lambdas
我正在learnyouahaskell.com学习Haskell,有这样一个例子:Haskell 哈斯克尔多线Lambdas,haskell,lambda,multiline,parse-error,Haskell,Lambda,Multiline,Parse Error,我正在learnyouahaskell.com学习Haskell,有这样一个例子: search :: (Eq a) => [a] -> [a] -> Bool search needle haystack = let nlen = length needle in foldl (\acc x - > if take nlen x == needle then True else acc) False (tails haystack)
search :: (Eq a) => [a] -> [a] -> Bool
search needle haystack =
let nlen = length needle
in foldl (\acc x -
> if take nlen x == needle then True else acc) False (tails haystack)
但当我用GHC尝试这段代码时,它给了我
error: parse error on input ‘-’
但它在这样的情况下起作用:
search :: (Eq a) => [a] -> [a] -> Bool
search needle haystack =
let nlen = length needle
in foldl (\acc x -> if take nlen x == needle then True else acc) False (tails haystack)
Haskell有允许多行lambda的功能吗?还是我缺少了一些功能?不要破坏
->
只要做:
search :: (Eq a) => [a] -> [a] -> Bool
search needle haystack =
let nlen = length needle
in foldl (\acc x ->
if take nlen x == needle then True else acc) False (tails haystack)
或
允许您使用多行lambda。然而,你在最坏的地方分裂了队伍。
->
很重要!保持这一点,它应该会起作用。只是不要打断箭头-保持在一起\acc x->
并缩进下一行您不能在单词或运算符中间插入换行符。将->
运算符保持在一起并缩进下一行解决了问题。谢谢你的帮助!有人能把答案贴出来让我把它标记为已回答吗?
search :: (Eq a) => [a] -> [a] -> Bool
search needle haystack =
let nlen = length needle
in foldl (\acc x
-> if take nlen x == needle then True else acc) False (tails haystack)