2017-09-16 3 views
2

저는 하스켈 초보자입니다. 미리 사과드립니다.하스켈에서 어떻게 목록을 필터링 할 수 있습니까?

나는 HXT 및 haskell을 사용하여 일부 HTML 값 (<a name="value-to-extract">)을 구문 분석합니다. 나는이 할 경우

anames <- runX $ parseHtml contents >>> css "a" >>> getAttrValue "name" 

:

["","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","","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"]

지금 내가 원하는 :

print anames 

를 그 다음이 목록을 인쇄 나는 이것을 사용 a name=""name 값의 목록을 얻을 수 있습니다 "" 인 항목을 모두 제거하십시오.

그래서 나는

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 명령을 실행하면 예상대로 작동합니다. 내가 여기서 무엇을 놓치고 있니?

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

은 그래서 모나드되지 않습니다 :

+1

을 ... –

+0

쓰기'nonEmptyANames = 필터 (> S/= ""\들)을하자 –

답변

5

filter는 서명이 있습니다. 이 경우 let 표현식을 사용할 수 있습니다. 당신이 nonEmptyANames <- filter (\s -> s /= "") anames 교체해야합니다 : - anames` 문제는 filter`이 모나드없는 '것이 더

let nonEmptyANames = filter (\s -> s /= "") anames
관련 문제