質問
単純な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
.
-
allRegions
の書き方それとも、それを書くのを掘るべきなのは、より良いですか? - もう1つの質問は、
regions
の結果を追加するだけでなく、地域リストの特定の場所へのbaseRegion
を挿入するか(例えば、 'e'で始まっている要素の後に、または名前が 'e'で始まっている要素の後)に挿入されますか?
解決
あなたが探しているコンビネータは (>>.)
ArrowList
タイプクラス。矢印の上にリスト関数を適用することができます。例えば。矢印の前面に要素を上に追加することは
regions tree >>. (baseRegion:)
.
あなたの2番目の質問は、リスト内の領域を正しい場所に挿入するためにユーティリティ関数を書くことができます。
のような署名を持つものinsertRegion :: Region -> [Region] -> [Region]
.
で、矢印
で使用できます。regions tree >>. insertRegion baseRegion
.
BTW私はあなたのregions
関数からツリーパラメータを個人的に削除し、明示的な矢印連鎖を使用するだけで上記が;
tree >>> regions >>. insertRegion baseRegion
. 所属していません StackOverflow