문제

간단한 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
  1. 작성 방법 allRegions?아니면, 어디를 파서 써야 할까요?
  2. 또 다른 질문은 추가하는 것뿐만 아니라 regions의 결과를 삽입했지만 baseRegion 지역 목록의 특정 위치로(예: 두 번째 요소 뒤 또는 이름이 'E'로 시작하는 요소 뒤)?
도움이 되었습니까?

해결책

당신이 찾고있는 결합자는 다음과 같습니다 (>>.) 에서 ArrowList 유형 클래스.화살표에 목록 기능을 적용할 수 있습니다.예:화살표 앞에 요소를 추가하는 것이 좋습니다.

regions tree >>. (baseRegion:)

두 번째 질문의 경우 목록의 영역을 올바른 위치에 삽입하는 유틸리티 함수를 작성할 수 있습니다.다음과 같은 서명이 있는 것

insertRegion :: Region -> [Region] -> [Region]

그런 다음 화살표에 사용할 수 있습니다

regions tree >>. insertRegion baseRegion

그런데 저는 개인적으로 귀하의 트리 매개변수를 제거하고 싶습니다. regions 함수를 사용하고 명시적인 화살표 연결을 사용하면 위와 같습니다.

tree >>> regions >>. insertRegion baseRegion
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top