HXT上的模式匹配无法正常工作

时间:2019-01-29 07:37:29

标签: haskell hxt

例如,我有一个div,其中包含一些p和其他,并且我想将p s与show映射。

defShow :: NTree XNode -> String
defShow (NTree (XTag div' _) contents)
  | show div' == "div" = intercalate "\n" $ map defShow contents
defShow p@(NTree (XTag p' []) _)
  | show p' == "p" = show p
defShow x = error $ show x

但是使用以下测试数据,这将不起作用。我的意思是整个节点,而不仅仅是p节点。

NTree (XTag "div" [NTree (XAttr "class") [NTree (XText "refsect2") []]])
      [ NTree (XText "\n") []
      , NTree (XTag "p" []) [SOME_TEXT_NODE] ]

1 个答案:

答案 0 :(得分:2)

请勿在程序逻辑中使用show。您可以使用mkNameString转换为QName

defShow :: NTree XNode -> String
defShow (NTree (XTag div' _) contents)
  | div' == mkName "div" = intercalate "\n" $ map defShow contents
defShow p@(NTree (XTag p' []) _)
  | p' == mkName "p" = show p
defShow x = ""