Haskell OPTPASE应用程序非空字符串参数
如何实现非空字符串参数Haskell OPTPASE应用程序非空字符串参数,haskell,optparse-applicative,Haskell,Optparse Applicative,如何实现非空字符串参数 parserStart :: Parser String parser = strArgument (metavar "EXAMPLE") 如何防止它成功解析空字符串-“” 以前有过Parsec/Attoparsec的经验,我假设我可以编写自己的解析器,或者可能使用一些应用程序来检查值,如果它是空字符串,则会失败(我认为这是不可能的,因为我需要一个Monad)我通常使用Options.applicative.eitherReader,它是绑定readerAsk的结果并
parserStart :: Parser String
parser = strArgument (metavar "EXAMPLE")
如何防止它成功解析空字符串-“”
以前有过Parsec/Attoparsec的经验,我假设我可以编写自己的解析器,或者可能使用一些应用程序来检查值,如果它是空字符串,则会失败(我认为这是不可能的,因为我需要一个Monad)我通常使用
Options.applicative.eitherReader
,它是绑定readerAsk
的结果并相应地调用fail
或return
的模式的一个小包装器:nonEmptyStr=eitherReader\case{“-->Left”…;x->Right$fromString x}
(也带有块参数)
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")