首页 > 解决方案 > optparse-applicative 非空字符串参数

问题描述

如何实现非空字符串参数?

parserStart :: Parser String
parser = strArgument (metavar "EXAMPLE") 

如何防止它成功解析空字符串 - ""

以前有 Parsec/Attoparsec 的经验,我假设我可以编写自己的解析器,或者可能使用一些应用程序来检查值以及fail它是否是空字符串(我认为这是不可能的,因为我需要一个 Monad)?

标签: haskelloptparse-applicative

解决方案


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") 

推荐阅读