Domanda

Sto imparando le frecce Haskell in caso di analisi della pagina HTML semplice. Il compito è quello di scaricare il sito della regione di base baseRegion = Region "Yekaterinburg" "http://example.com/r/ekb", Parse Collegamenti ad altre regioni (via 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
.

e aggiungi una regione di base al risultato:

allRegions :: ArrowXml cat => cat a (NTree XNode) -> cat a Region
.

    .
  1. Come scrivere allRegions?O, meglio, dove dovrei scavare per scriverlo?
  2. Un'altra domanda è come non solo aggiungere il risultato del regions ma inserire baseRegion in un particolare elenco di regime di regioni (ad esempio dopo il secondo elemento o dopo un elemento il cui nome sta iniziando con 'e')?
È stato utile?

Soluzione

Penso che il Combinator che stai cercando sia (>>.) in ArrowList tipo-class.Ti consente di applicare qualsiasi funzione di elenco sulla freccia.Per esempio.Preparare un elemento alla parte anteriore della freccia sarebbe.

regions tree >>. (baseRegion:)
.

Per quanto riguarda la tua seconda domanda, è possibile scrivere una funzione di utilità per inserire la regione nell'elenco per il punto corretto E.G.qualcosa con una firma come

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

E poi puoi usarlo sulla freccia

regions tree >>. insertRegion baseRegion
.

BTW Rimuovere personalmente il parametro dell'albero dalla funzione regions e solo utilizzare la catena di freccia esplicita in modo che quanto sopra diventi.

tree >>> regions >>. insertRegion baseRegion
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top