考虑下面的代码片段 ReadP :
ReadP
import Text.ParserCombinators.ReadP readP_to_S (between (char '[') (char ']') (munch (/= ','))) "[234]"
它输出
[]
根据文件,
介于::ReadP open->读取关闭->阅读a->读取来源# 在open-close之间,p解析open,后面是p,最后是close。只返回p的值。
介于::ReadP open->读取关闭->阅读a->读取来源#
在open-close之间,p解析open,后面是p,最后是close。只返回p的值。
因此,我希望返回值为
[("234", "")]
因为第一个解析器匹配开始括号,第二个匹配结束括号,最后一个匹配除逗号之外的所有内容。为什么不这么做?
看着 the source
between open close p = do _ <- open x <- p _ <- close return x
似乎很明显 p 解析器不能使用 close 解析器(对我来说,这不是很直观)。
p
close
例如,这个
readP_to_S (between (char '[') (char ']') (munch (/= ']'))) "[234]"
给予
[("234","")]