haskell - optparse-applicative 非空字符串参数
问题描述
如何实现非空字符串参数?
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")
推荐阅读
- mysql - 如何从两列中获取唯一性?
- python - 使用 selenium Python 向下滚动时页面不会自动加载
- android - 在某些设备上的缩放动画期间,有时文本会在 TextView 中消失
- android - 在Android中的小时间间隔内防止触摸
- types - 用于浮点数或复杂输入的 rust-ndarray 函数
- reactjs - 如何在 React 17 中使用反应测试库模拟表格数据?
- excel - 将 Excel 表连接到 Power BI 服务数据集
- javascript - 将 CSS 样式表与 JS 模块相结合
- riscv - 创建自定义 RISC-V 指令时无法识别的操作码
- azure - Databricks SQL 分析