混合标识符解析与空白解析器
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>
解析库有函数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>