我有
stringparse = mstring
<$> char '"'
<*> (many alphaNum <|> many space)
<*> char '"'
where mstring a b c = [a] ++ b ++ [c]
Run Code Online (Sandbox Code Playgroud)
当我做,
parse stringparse "" "\"hello\" 我明白了 Right "\"hello\""
当我做,
parse stringparse "" "\"\"" 我明白了 Right "\"\""
但是当我这样做的时候
parse stringparse "" "\" \"" 要么 parse stringparse "" "\"he llo\""
这是行不通的.
我收到错误,
Left (line 1, column 2):
unexpected " "
expecting letter or digit or "\""
Run Code Online (Sandbox Code Playgroud)
和
Left (line 1, column 4):
unexpected " "
expecting letter or digit or "\""
Run Code Online (Sandbox Code Playgroud)
分别.
我不明白为什么代码不能正确解析空格.
Dan*_*zer 10
这是因为你这样做了many alphaNum <|> many space.many接受0作为可接受的字符数量,它总是成功.这与正则*表达式中的行为相同.
因此,<|>它永远不会失败并呼唤正确的一方.所以你说"尽量多尝试alphaNum然后拿一个".
你想要的是什么
many (alphaNum <|> space)
Run Code Online (Sandbox Code Playgroud)
换句话说,"尽可能多的alphaNums或spaces".
| 归档时间: |
|
| 查看次数: |
226 次 |
| 最近记录: |