3

シンプルな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する方法です (たとえば、2 番目の要素の後、または名前が「E」で始まる要素の後)。
4

1 に答える 1

2

あなたが探しているコンビネータは(>>.)ArrowListクラスにあると思います。矢印に任意のリスト関数を適用できます。たとえば、矢印の前に要素を追加すると、次のようになります。

regions tree >>. (baseRegion:)

2番目の質問については、リスト内のリージョンを正しい場所に挿入するユーティリティ関数を作成できます。たとえば、次のような署名のあるものです

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

そして、矢印で使用できます

regions tree >>. insertRegion baseRegion

ところで、私はあなたの関数からツリーパラメータを個人的に削除し、regions明示的な矢印チェーンを使用するだけで、上記のようになります。

tree >>> regions >>. insertRegion baseRegion
于 2014-04-14T09:45:34.273 に答える