Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Xml 要列表的折叠箭头_Xml_Haskell_Arrows_Hxt - Fatal编程技术网

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 有没有一种方法可以在箭头中的某一步收集元素

我有一些问题,虽然我怀疑这只是我缺少了一些关于箭的东西

我有一个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::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
让我们将箭头的类型匹配起来,以便可以组合箭头。