我是Haskell的初学者,所以请提前道歉。
我正在使用HXT和haskell解析一些HTML值(<a name="value-to-extract">
)。我可以使用以下代码获取a name=""
name
值列表:
anames <- runX $ parseHtml contents >>> css "a" >>> getAttrValue "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中尝试过滤命令,它会按预期工作。我在这里错过了什么?
答案 0 :(得分:5)
filter
有签名:
filter :: (a -> Bool) -> [a] -> [a]
所以它不是monadic。在这种情况下,您可以使用let
表达式。您应该将nonEmptyANames <- filter (\s -> s /= "") anames
替换为:
let nonEmptyANames = filter (\s -> s /= "") anames