首页 > 解决方案 > ReadP 在返回空结果之间

问题描述

考虑使用以下代码段ReadP

import Text.ParserCombinators.ReadP

readP_to_S (between (char '[') (char ']') (munch (/= ','))) "[234]"

它输出

[]

根据文件,

:: ReadP open -> ReadP close -> ReadP a -> ReadP a Source#之间

在 open close p 之间解析 open,然后是 p,最后是 close。仅返回 p 的值。

因此,我希望返回值是

[("234", "")]

因为第一个解析器匹配左括号,第二个匹配右括号,最后一个匹配除逗号之外的所有内容。为什么不这样做?

标签: parsinghaskell

解决方案


源头

between open close p = do _ <- open
                          x <- p
                          _ <- close
                          return x

很明显,p解析器不能使用解析器所需的字符close(对我来说,这不是很直观)。

例如,这

readP_to_S (between (char '[') (char ']') (munch (/= ']'))) "[234]"

[("234","")]

推荐阅读