Соответствие шаблона на HXT не работает должным образом - PullRequest
0 голосов
/ 29 января 2019

Например, у меня есть div, содержащий несколько p с и другие, и я хочу сопоставить p с 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 голосов
/ 29 января 2019

Не используйте show в логике вашей программы.Вы можете использовать mkName для преобразования String в 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 = ""
...