题
我有一些问题 HXT, 虽然我怀疑它只是一些我失约箭。
我有一个XML结构喜欢
<str name="field1">value</str>
<lst name="field2"><str>value2</str><str>value3</str></lst>
和内部结构
data XmlData = XmlStr String | XmlList XmlData
有没有办法收集的元素中的一个步骤的一个箭头?
getXmlData :: IOSArrow XmlTree (String, XmlData)
getXmlData = (getAttrl >>> getChildren >>> getText) &&&
((filterByType "str" >>> getText >>> arr (\x -> XmlStr x))
<+> (filterByType "lst" >>> getXmlData))
where filterByType t = isElem >>> hasName t >>> getChildren
递呼吁getXmlData需要收集它的回答和包裹在XmlList构造,但我不知道如何收集的条款。目前我完成这些后处理关于输出(在收集名称相同),但是我想一个更好的解决方案。
解决方案
在一般可以使用 listA
从 Control.Arrow.ArrowList
要做到这一点。它具有类型 (ArrowList a) => a b c -> a b [c]
和一个
组合转换一个箭头 成determinstic版的所有 结果收集在一个单一的元素 名单。
(见我的答案 在这里, 和 在这里, 对于一个具体的例子。)
在这一特定情况下可以使用 >.
组合的 XmlList
构造作为其第二个论点来完成同样的事情更加简明扼要。
不隶属于 StackOverflow