Haskell HXT分解XML数据
我是个新手,所以对我放轻松点 我试图计算XML文件中特定节点的数量。XML文件的布局是这样的,在根目录下,我们有一个场景列表,在每个场景下,我们有一个层列表,每个层都有一个名为“recs”的节点。我想计算每个场景中矩形的数量。我不完全理解HXT是如何工作的 我将复制导致问题的代码摘录Haskell HXT分解XML数据,haskell,arrows,hxt,Haskell,Arrows,Hxt,我是个新手,所以对我放轻松点 我试图计算XML文件中特定节点的数量。XML文件的布局是这样的,在根目录下,我们有一个场景列表,在每个场景下,我们有一个层列表,每个层都有一个名为“recs”的节点。我想计算每个场景中矩形的数量。我不完全理解HXT是如何工作的 我将复制导致问题的代码摘录 process :: IOSArrow XmlTree [XmlTree] process getScene >>. map func where func a = a >>>
process :: IOSArrow XmlTree [XmlTree]
process getScene >>. map func
where func a = a >>> getLayer >>> getRec
这些get函数的类型都是IOSArrow-XmlTree-XmlTree
为什么这样不行?我该如何修复它
错误消息:
count_dirty.hs:20:16: error:
• Couldn't match type ‘Data.Tree.NTree.TypeDefs.NTree XNode’
with ‘IOSLA (XIOState ()) a0 XmlTree’
Expected type: [XmlTree] -> [IOSLA (XIOState ()) a0 XmlTree]
Actual type: [IOSLA (XIOState ()) a0 XmlTree]
-> [IOSLA (XIOState ()) a0 XmlTree]
• In the second argument of ‘(>>.)’, namely ‘map func’
In the second argument of ‘(>>>)’, namely ‘getScene >>. map func’
In the expression:
readDocument [withValidate no] file >>> getScene >>. map func
|
20 | getScene >>. map func
| ^^^^^^^^
谢谢 您在这里声明
func
是一个助手函数,它接受一些a
,然后计算a>>getLayer>>getRec
作为
GHC可以推断,a>>getRec
意味着cat~IOSArrow、b~XmlTree、c~XmlTree
,将变量a
保留为未确定类型iosarow a XmlTree
,依此类推
func :: a -> IOSArrow XmlTree XmlTree
及
自
现在GHC非常确定,a~XmlTree,d~iosarow-XmlTree-XmlTree
,给出
getScene >>. map func
:: IOSArrow
XmlTree
(IOSArrow XmlTree XmlTree)
这个问题来自于您的map func
->。
需要一个纯函数作为其第二个参数<在您的例子中,code>func是一个生成箭头的函数,它不是纯箭头
我想您可能想使用,它允许您从输入生成一个箭头,然后应用该箭头,这正是您在这里所做的。在这种情况下,你会写
process = applyA (getScene >>. map func)
...
请注意,您使用的是列表箭头,因此类型签名仅为
process :: IOSArrow XmlTree XmlTree
您收到的错误消息是什么?我已将问题更新为包含它!谢谢你帮我修好了!
getScene >>. map func
:: IOSArrow
XmlTree
(IOSArrow XmlTree XmlTree)
process = applyA (getScene >>. map func)
...
process :: IOSArrow XmlTree XmlTree