具有 Maybe 结果的 Attoparsec 可选解析器

Attoparsec optional parser with Maybe result

我有一个这样的 Attoparsec 解析器:

myParser :: Parser Text
myParser = char '"' *> takeWhile (not . isspace) <* char '"'

我想让这个解析器可选,所以我得到一个函数 returns Just txt 如果解析器匹配, Nothing 否则,即签名的函数:

myMaybeParser :: Parser (Maybe Text)

我该怎么做?

您可以为此使用 optionParser 的 Applicative 实例:

-- Make a parser optional, return Nothing if there is no match
maybeOption :: Parser a -> Parser (Maybe a)
maybeOption p = option Nothing (Just <$> p)

然后您可以像这样使用它:

myMaybeParser = maybeOption myParser