Haskell“parse”未针对特定类型的字符串终止
当我尝试运行以下命令时,它永远不会终止Haskell“parse”未针对特定类型的字符串终止,haskell,xml-parsing,Haskell,Xml Parsing,当我尝试运行以下命令时,它永远不会终止 textValid :: Char -> Bool textValid c = c /= '<' && c /= '>' && not (isSpace c) text :: Parser String text = manyL (sat textValid) 问题是manyL解析器可以在不使用返回空列表的输入的情况下成功 我们不能通过一个不使用输入作为manyL参数就可以成功的解析器,
textValid :: Char -> Bool
textValid c = c /= '<' && c /= '>' && not (isSpace c)
text :: Parser String
text = manyL (sat textValid)
问题是manyL解析器可以在不使用返回空列表的输入的情况下成功
我们不能通过一个不使用输入作为manyL参数就可以成功的解析器,因为在这种情况下,您得到的正是这样一个无限循环
在第一个文本使用了输入的abc前缀之后,剩下的是def问题是manyL解析器可以在不使用返回空列表的输入的情况下成功
我们不能通过一个不使用输入作为manyL参数就可以成功的解析器,因为在这种情况下,您得到的正是这样一个无限循环
在第一个文本使用了输入的abc前缀后,您将得到def。定义了多少和manyL?我怀疑manyL被空间卡住了。对不起,假设只是manyL,我添加了manyL的定义。将textValid定义为not something是一个典型的解析错误。您允许绝对不在<>中的任何字符,而您应该确切地指定您允许的字符-可能只是字母数字值,以字母开头?任何事情都是不好的。很容易错误地匹配包含在字符串或类似错误中的分隔符。多少和manyL是定义的?我怀疑manyL被空间卡住了。对不起,假设只是manyL,我添加了manyL的定义。将textValid定义为not something是一个典型的解析错误。您允许绝对不在<>中的任何字符,而您应该确切地指定您允许的字符-可能只是字母数字值,以字母开头?任何事情都是不好的。很容易错误地匹配包含在字符串或类似错误中的分隔符。
textValid :: Char -> Bool
textValid c = c /= '<' && c /= '>' && not (isSpace c)
text :: Parser String
text = manyL (sat textValid)
parse (manyL text) "abc def <"
text = many1L (sat textValid)
text = do
result <- many1L (sat textValid)
skipSpaces
return result