混合标识符解析与空白解析器

Mixing identifier parse with whitespace parser

解析库有函数identifier和函数whitespace:

identifier :: Parser Char String

whitespace :: Parser Char ()

函数identifier对标识符进行了解析,但不丢弃输入文本中的空格。因此,我们有 withespace 函数,它会消耗输入中的所有空格。

我想知道是否可以将这两个功能合二为一。就像:

identifier' :: Parser Char String

但是,我是 Haskell 的新手,不知道我是怎么做到的。有办法吗?

您可以使用 (<*) :: Applicative f => f a -> f b -> f a,它将在这里 运行 第一个解析器,然后是第二个和 return 第一个解析器的结果,因此:

identifier' :: Parser Char String
identifier' = identifier <b><*</b> whitespace

这相当于:

identifier' :: Parser Char String
identifier' = do
    <b>idf</b> <- identifier
    whitespace
    return <b>idf</b>