Haskell flèches:insérer une valeur dans une liste
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
- Comment écrire
allRegions
?Ou mieux, où devrait-je creuser pour l'écrire? - Une autre question est de savoir comment pas seulement ajouter
regions
s 'entraîner, mais insérerbaseRegion
à 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")?
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