我有一个Attoparsec解析器,如下所示:
myParser :: Parser Text
myParser = char '"' *> takeWhile (not . isspace) <* char '"'
我想让这个解析器可选,所以我得到一个函数,如果解析器匹配Just txt
,则返回Nothing
,即签名的函数:
myMaybeParser :: Parser (Maybe Text)
我该怎么做?
答案 0 :(得分:1)
您可以使用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