Question

Je suis en train d'apprendre haskell flèches dans le cas de l'analyse simple page html.La tâche est de site de téléchargement de base de la région baseRegion = Region "Yekaterinburg" "http://example.com/r/ekb", analyser des liens vers d'autres régions (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

et à l'ajout d'une base de région pour le résultat:

allRegions :: ArrowXml cat => cat a (NTree XNode) -> cat a Region
  1. Comment écrire allRegions?Ou mieux, où devrait-je creuser pour l'écrire?
  2. Une autre question est de savoir comment pas seulement ajouter regionss 'entraîner, mais insérer baseRegion à certains endroit particulier de liste de régions (par exemple, après le deuxième élément ou après un élément dont le nom commence par un "E")?
Était-ce utile?

La solution

Je pense que le combinateur vous êtes à la recherche pour est (>>.) dans le ArrowList type de classe.Il vous permet d'appliquer n'importe quelle liste de fonction sur la flèche.E. g.ajoutant un élément à l'avant de la flèche serait.

regions tree >>. (baseRegion:)

Pour votre deuxième question, vous pouvez écrire une fonction d'utilité à l'insertion de la région dans la liste pour le bon spot par exemplequelque chose avec une signature comme

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

et puis vous pouvez l'utiliser sur la flèche

regions tree >>. insertRegion baseRegion

Btw, je serais personnellement retirer l'arbre de paramètres à partir de votre regions la fonction et l'utilisation juste explicite flèche chaînage ci-dessus devient.

tree >>> regions >>. insertRegion baseRegion
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top