2017-09-16 59 views
2

我是一個Haskell初學者,所以提前致歉。如何過濾Haskell中的列表?

我使用HXT和haskell解析出一些HTML值(<a name="value-to-extract">)。我可以利用這個得到的a name=""name值的列表:

​​

如果我這樣做:

print anames 

然後打印此列表:

["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","2H_4_0001","2HCH0001","2HCH0002","2HCH0003","2HCH0004","2HCH0005","2HCH0006","2HCH0007","2HCH0008","2HCH0009","2HCH0010","2HCH0011","2HCH0012","2HCH0013","2HCH0014","2HCH0015","2HCH0016","2HCH0017","2HCH0018","2HCH0019","2HCH0020","2HCH0021","2HCH0022","2HCH0023","2HCH0024","2HCH0025","2HCH0026","2HCH0027","2HCH0028","2HCH0029","2HCH0030","2HCH0031","2H_4_0033"]

現在我想刪除所有""的條目。

所以我嘗試

nonEmptyANames <- filter (\s -> s /= "") anames 

但我得到這個錯誤:

• Couldn't match type ‘[]’ with ‘IO’ 
    Expected type: IO String 
    Actual type: [String] 
• In a stmt of a 'do' block: 
    nonEmptyANames <- filter (\ s -> s /= "") anames 

我覺得這是一個打字的問題,所以我嘗試:

putStrLn ("type of aname is: " ++ (show (typeOf anames))) 

,它告訴我aname的類型是[Char]。如果我在ghci中嘗試filter命令,它按預期工作。我在這裏錯過了什麼?

+1

的問題是更多的'filter'不是一元... –

+0

寫'讓nonEmptyANames =過濾器(\ S - > S/= 「」)anames' –

回答

5

filter有簽名:

filter :: (a -> Bool) -> [a] -> [a] 

所以它不是一元。在這種情況下,您可以使用let表達式。此時應更換nonEmptyANames <- filter (\s -> s /= "") anames有:

let nonEmptyANames = filter (\s -> s /= "") anames