代码之家  ›  专栏  ›  技术社区  ›  Ami Tavory

ReadP在返回空结果之间

  •  0
  • Ami Tavory  · 技术社区  · 6 年前

    考虑下面的代码片段 ReadP :

    import Text.ParserCombinators.ReadP
    
    readP_to_S (between (char '[') (char ']') (munch (/= ','))) "[234]"
    

    它输出

    []
    

    根据文件,

    介于::ReadP open->读取关闭->阅读a->读取来源#

    在open-close之间,p解析open,后面是p,最后是close。只返回p的值。

    因此,我希望返回值为

    [("234", "")]
    

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Ami Tavory    6 年前

    看着 the source

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

    似乎很明显 p 解析器不能使用 close 解析器(对我来说,这不是很直观)。

    例如,这个

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

    给予

    [("234","")]