Pregunta

Estoy aprendiendo las flechas de Haskell en caso de analizar una página html simple.La tarea es descargar el sitio de la región base. baseRegion = Region "Yekaterinburg" "http://example.com/r/ekb", analiza enlaces a otras regiones (a través de 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

y agregue una región base al resultado:

allRegions :: ArrowXml cat => cat a (NTree XNode) -> cat a Region
  1. Cómo escribir allRegions?O, mejor, ¿dónde debería excavar para escribirlo?
  2. Otra pregunta es cómo no solo agregar regionsresultado pero insertar baseRegion ¿A algún lugar particular de la lista de regiones (por ejemplo, después del segundo elemento o después de un elemento cuyo nombre comienza con 'E')?
¿Fue útil?

Solución

Creo que el combinador que está buscando es (>>.) en el ArrowList clase de tipo.Le permite aplicar cualquier función de lista en la flecha.P.ej.Preparar un elemento al frente de la flecha sería.

regions tree >>. (baseRegion:)

A fin de su segunda pregunta, puede escribir una función de utilidad para insertar la región en la lista en el lugar correcto E.G.algo con una firma como

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

y luego puedes usarlo en la flecha

regions tree >>. insertRegion baseRegion

Por cierto, eliminaría personalmente el parámetro de árbol de su función regions y simplemente usaría la flecha explícita que encadena para que se convierta anteriormente.

tree >>> regions >>. insertRegion baseRegion

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top