문제
간단한 HTML 페이지를 파싱할 경우 하스켈 화살표를 배우고 있습니다.작업은 기본 지역의 사이트를 다운로드하는 것입니다. baseRegion = Region "Yekaterinburg" "http://example.com/r/ekb"
, 다른 지역에 대한 링크를 구문 분석합니다(hxt를 통해):
regions :: ArrowXml cat => cat a (NTree XNode) -> cat a Region
regions tree =
tree >>> multi (hasName "a" >>> hasAttrValue "class" (== ".regionlink")) >>>
proc x -> do
rname <- getText <<< getChildren -< x
rurl <- getAttrValue "href" -< x
returnA -< Region rname rurl
결과에 기본 영역을 추가합니다.
allRegions :: ArrowXml cat => cat a (NTree XNode) -> cat a Region
- 작성 방법
allRegions
?아니면, 어디를 파서 써야 할까요? - 또 다른 질문은 추가하는 것뿐만 아니라
regions
의 결과를 삽입했지만baseRegion
지역 목록의 특정 위치로(예: 두 번째 요소 뒤 또는 이름이 'E'로 시작하는 요소 뒤)?
해결책
당신이 찾고있는 결합자는 다음과 같습니다 (>>.)
에서 ArrowList
유형 클래스.화살표에 목록 기능을 적용할 수 있습니다.예:화살표 앞에 요소를 추가하는 것이 좋습니다.
regions tree >>. (baseRegion:)
두 번째 질문의 경우 목록의 영역을 올바른 위치에 삽입하는 유틸리티 함수를 작성할 수 있습니다.다음과 같은 서명이 있는 것
insertRegion :: Region -> [Region] -> [Region]
그런 다음 화살표에 사용할 수 있습니다
regions tree >>. insertRegion baseRegion
그런데 저는 개인적으로 귀하의 트리 매개변수를 제거하고 싶습니다. regions
함수를 사용하고 명시적인 화살표 연결을 사용하면 위와 같습니다.
tree >>> regions >>. insertRegion baseRegion
제휴하지 않습니다 StackOverflow