2015-12-07 43 views
0

我有一個Attoparsec解析器是這樣的:Attoparsec可選解析器使用可能導致

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

我想使這個解析器可選的,所以我得到一個返回Just txt的函數,如果解析器比賽和Nothing否則,即功能的簽名:

myMaybeParser :: Parser (Maybe Text) 

我該怎麼做?

+1

在我看來,你繼續問問題,並接受你的自己的答案,順便提一下,在問題的同一時間發佈。 – rubik

+1

@rubik是的,這是StackOverflow的一個內置功能,並且積極鼓勵使用它!請閱讀https://stackoverflow.com/help/self-answer –

+0

@rubik請注意,我會高興地接受其他答案。我有幾個自我回答的問題,有人想出了更好的答案,我很高興地接受了。 –

回答

1

您可以使用optionParser此應用型實例:

-- 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 
+3

Iirc,還有一個Alternative實例,在這種情況下,您可以使用可選功能。 –

相關問題