如何实现非空字符串参数?
parserStart :: Parser String
parser = strArgument (metavar "EXAMPLE")
如何防止它成功解析空字符串 - ""
?
有过Parsec / Attoparsec之前的经验,我假设我可以编写自己的解析器,或者可能使用适用于检查值的东西和fail
,如果它是一个空字符串(我认为这是不可能的,因为我需要一个Monad)?
import Data.String
import Data.Text
import Options.Applicative.Types (ReadM, readerAsk)
nonEmptystr :: IsString s => ReadM s
nonEmptystr = do
readerAsk >>= \case
"" -> fail "Invalid argument: Empty string"
x -> pure $ fromString x
f :: Parser Text
f = argument nonEmptystr (metavar "task")