0

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

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

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

myMaybeParser :: Parser (Maybe Text)

我怎样才能做到这一点?

4

1 回答 1

1

您可以为此使用optionApplicative 实例Parser

-- 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
于 2015-12-07T20:24:02.670 回答