2016-07-30 11 views
1

私はlearnyouahaskell.comからHaskellのを学んでいるとの例では、このようなことがあります: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) 

しかし、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) 

複数行のラムダを許可する機能がありますか、それともsom私は行方不明ですか?

+7

をあなたは複数行ラムダ許可されています。しかし、あなたは最悪の場所で線を分割しています。 ' - >'は重要です!それを保ち、それは動作するはずです。 – 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

関連する問題