2016-07-30 70 views
1

我从learnyouahaskell.com学习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) 

但是,当尝试这种代码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或是索姆我错过了什么?

+7

你被允许多行lambda表达式。然而,你在最糟糕的地方分裂线路。 ' - >'很重要!保持这一点,它应该工作。 – pdexter

+1

只是不要折断你的箭头 - 把它放在一起'\ acc x - >'并缩进下一行 – Carsten

+2

你不能在单词或操作符中插入换行符。 – melpomene

回答

3

不要打破->

只要做到:

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) 
+0

缩进下一行将使其可读。 – dfeuer