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