我正在尝试编写一个箭头,它将使用HXT从XML解析生成编号元素。好像应该使用状态箭头,就像状态monad一样,但我可以在HXT包中找到的所有示例和访问状态的方法(XmlState)都使用IOStateArrow而我更愿意使用StateArrow保持纯粹以简化测试过程。存在这样的变种吗?如果没有,我如何将状态添加到HXT解析而不必在IO中运行箭头?
答案 0 :(得分:3)
您可以使用ArrowState的SLA实例。 一个例子:假设我们需要连接所有二级文本元素。
Prelude Text.XML.HXT.Core> fst $ runSLA (xread >>> getChildren >>> getChildren >>> isText >>> getText >>> changeState (++)) "" "<xml><item>a</item><item>b</item></xml>"
"ab"
请注意,您无法在IO
内使用SLA
,因为没有ArrowIO
个实例。
希望,这是你需要的。