質問

単純なHTMLページを解析する場合は、Haskell矢印を学びます。 このタスクは、基本領域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. もう1つの質問は、regionsの結果を追加するだけでなく、地域リストの特定の場所へのbaseRegionを挿入するか(例えば、 'e'で始まっている要素の後に、または名前が 'e'で始まっている要素の後)に挿入されますか?
役に立ちましたか?

解決

あなたが探しているコンビネータは (>>.) ArrowList タイプクラス。矢印の上にリスト関数を適用することができます。例えば。矢印の前面に要素を上に追加することは

regions tree >>. (baseRegion:)
.

あなたの2番目の質問は、リスト内の領域を正しい場所に挿入するためにユーティリティ関数を書くことができます。

のような署名を持つもの
insertRegion :: Region -> [Region] -> [Region]
.

で、矢印

で使用できます。
regions tree >>. insertRegion baseRegion
.

BTW私はあなたのregions関数からツリーパラメータを個人的に削除し、明示的な矢印連鎖を使用するだけで上記が;

tree >>> regions >>. insertRegion baseRegion
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top