Pergunta

Eu estou aprendendo haskell setas no caso de análise simples página html.A tarefa é site de download de região da base de dados baseRegion = Region "Yekaterinburg" "http://example.com/r/ekb", analisar links para outro regiões (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 acrescentar uma base de região para o resultado:

allRegions :: ArrowXml cat => cat a (NTree XNode) -> cat a Region
  1. Como escrever allRegions?Ou, melhor, onde devo cavar para escrevê-lo?
  2. Outra questão é como não apenas acrescentar regions's de resultado, mas de inserir baseRegion a algum determinado lugar da lista de regiões (por exemplo, após o segundo elemento ou depois de um elemento cujo nome está começando com "E")?
Foi útil?

Solução

Eu acho que o combinator que você está procurando é (>>.) no ArrowList tipo-classe.Ele permite que você aplicar qualquer função de lista na seta.E. g.adicionar um elemento à frente da seta seria.

regions tree >>. (baseRegion:)

Assim como para a sua segunda pergunta, você pode escrever uma função de utilidade para inserir a região na lista para o lugar correto e.g.algo com uma assinatura como

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

e, em seguida, você pode usá-lo na seta

regions tree >>. insertRegion baseRegion

Btw, eu pessoalmente teria de remover o parâmetro de árvore a partir de sua regions função e apenas utilizar explícita seta encadeamento tão acima se torna.

tree >>> regions >>. insertRegion baseRegion
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top