Aggiunta di stato a HXT parsing
Domanda
Sto cercando di scrivere una freccia che genererà gli elementi numerati da una parse XML con HXT. Sembra che dovrebbe essere fatto con una freccia di stato, come lo Stato Monade, ma tutti gli esempi che posso trovare nella confezione HXT e le modalità per accedere allo stato ( XmlState ) utilizzare l'IOStateArrow e mi sarebbe molto meglio tenerlo puro di semplificare il processo di test, con lo StateArrow. Esistono tali varianti? Se no, come potrei aggiungere stato a un parse HXT senza dover ricorrere a correre la freccia nel IO?
Soluzione
È possibile utilizzare ArrowState istanza di SLA per questo. Un esempio:. Lasciate che dobbiamo assumere per concatenare tutti gli elementi di testo di secondo livello
Prelude Text.XML.HXT.Core> fst $ runSLA (xread >>> getChildren >>> getChildren >>> isText >>> getText >>> changeState (++)) "" "<xml><item>a</item><item>b</item></xml>"
"ab"
Si noti che non è possibile utilizzare IO
all'interno del SLA
dal momento che in caso non ha ArrowIO
.
La speranza, è quello che ti serve.