首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用HXT在Haskell中解析XML

用HXT在Haskell中解析XML
EN

Stack Overflow用户
提问于 2021-03-23 10:15:35
回答 1查看 59关注 0票数 1

我正在尝试用https://hackage.haskell.org/package/hxt解析一个XML文件。在下面的代码中,我需要使用从外部标记中的属性获得的额外参数来解析内部元素。但是i在第二行不可用(第二个箭头?)。如何将i传递给getTerminal

代码语言:javascript
复制
getSentence = atTag "s" >>>
  proc x -> do
    i   <- getAttrValue "id" -< x
    ts  <- listA (getTerminal i) <<< atTag "terminals"    -< x
    returnA -< Sentence { sid = i, terminals = ts }

...

getTerminal sid = atTag "t" >>> 
  proc x -> do
    i   <- getAttrValue "id"    -< x    
    lem <- getAttrValue "lemma" -< x
    returnA -< Terminal { lemma = lem, tid = nid i }
  where
    nid x = fromMaybe x (stripPrefix (sid ++ "_") x)

也就是说,i包含我想要传递给getTerminal的值。

EN

回答 1

Stack Overflow用户

发布于 2021-03-23 11:57:11

使用-<<而不是-<使本地绑定对箭头可用:

代码语言:javascript
复制
getSentence = atTag "s" >>>
  proc x -> do
    i   <- getAttrValue "id" -< x
    ts  <- listA (getTerminal i) <<< atTag "terminals" -<< x
    returnA -< Sentence { sid = i, terminals = ts }

请注意,-<<是根据ArrowApplyapp实现的。例如,抛开语法上的笨拙不谈,上面的出现可以替换为:

代码语言:javascript
复制
    ts  <- app <<< listA . getTerminal *** atTag "terminals" -< (i, x)

hxt的相关箭头是ArrowApply的实例,因此-<<可以与它们一起使用。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66756351

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档