2016-07-30 49 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