具有 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)
我该怎么做?
您可以为此使用 option
和 Parser
的 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
我有一个这样的 Attoparsec 解析器:
myParser :: Parser Text
myParser = char '"' *> takeWhile (not . isspace) <* char '"'
我想让这个解析器可选,所以我得到一个函数 returns Just txt
如果解析器匹配, Nothing
否则,即签名的函数:
myMaybeParser :: Parser (Maybe Text)
我该怎么做?
您可以为此使用 option
和 Parser
的 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