Xml 要列表的折叠箭头
我有一些问题,虽然我怀疑这只是我缺少了一些关于箭的东西 我有一个XML结构,比如Xml 要列表的折叠箭头,xml,haskell,arrows,hxt,Xml,Haskell,Arrows,Hxt,我有一些问题,虽然我怀疑这只是我缺少了一些关于箭的东西 我有一个XML结构,比如 <str name="field1">value</str> <lst name="field2"><str>value2</str><str>value3</str></lst> data XmlData = XmlStr String | XmlList XmlData 有没有一种方法可以在箭头中的某一步收集元素
<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::IOSArrow-XmlTree(字符串,XmlData)
getXmlData=(getAttrl>>>getChildren>>>getText)&&
((filterByType“str”>>>getText>>arr(\x->XmlStr x))
(filterByType“lst”>>>getXmlData))
其中filterByType t=isElem>>>hasName t>>>getChildren
对getXmlData的递归调用需要收集其答案并封装在XmlList构造函数中,但我不知道如何收集术语。目前,我正在通过对输出进行一些后处理(以相同的名称收集)来完成这项工作,但我希望有更好的解决方案。通常,您可以使用
listA
from来完成这项工作。它的类型为(箭头列表a)=>AB c->AB[c]
,是一个
用于转换箭头的组合符
变成一个决定论的版本
在单个元素中收集的结果
名单
(有关具体示例,请参见我的答案和。)
在这种特定情况下,您可以使用
.
组合符和XmlList
构造函数作为第二个参数,以更简洁地完成相同的任务。>。当我将getChildren调用移出helper并添加一些括号时,这项工作就完成了。我对listA的用法很好奇,但找不到将其作为管道一部分的示例。您能为listA提供一个解决方案吗?@amccausl:在上面链接的第一个答案中,我们有一个类型为a XmlTree(String,String)
的非确定性箭头,我们希望将它与arr Data.Map.fromllist
(类型为a[(String,String)](M.Map String String)
)一起使用来填充地图listA
让我们将箭头的类型匹配起来,以便可以组合箭头。