首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

optparse-applicative的(Sub)命令同义词

optparse-applicative 是一个用于解析命令行参数的 Haskell 库。它提供了一种声明式的方式来定义命令行接口,并且支持子命令(subcommands)。Sub 类型是 optparse-applicative 中用于表示子命令的数据类型。

基础概念

optparse-applicative 中,子命令允许你将一个大的应用程序分解为多个小的、独立的命令,每个命令都有自己的参数和选项。这使得应用程序更加模块化和易于维护。

类型

Sub 类型通常与 Parser 类型一起使用,用于定义子命令及其参数。Sub 类型的定义如下:

代码语言:txt
复制
data Sub a = Sub
  { subparser :: Parser a
  , subname   :: Text
  , subdesc   :: Text
  }

其中:

  • subparser 是子命令的解析器。
  • subname 是子命令的名称。
  • subdesc 是子命令的描述。

应用场景

子命令在需要处理多种不同操作的应用程序中非常有用。例如,一个版本控制系统可能有 commitpushpull 等多个子命令,每个子命令都有自己的参数和选项。

示例代码

以下是一个简单的示例,展示了如何使用 optparse-applicative 定义一个带有子命令的应用程序:

代码语言:txt
复制
{-# LANGUAGE OverloadedStrings #-}

import Options.Applicative
import Data.Text (Text)

data Command = Commit Text
             | Push Text
             | Pull Text

commitParser :: Parser Command
commitParser = Commit <$> strOption
  ( long "message"
  <> short 'm'
  <> metavar "MESSAGE"
  <> help "Commit message" )

pushParser :: Parser Command
pushParser = Push <$> strOption
  ( long "remote"
  <> short 'r'
  <> metavar "REMOTE"
  <> help "Remote repository" )

pullParser :: Parser Command
pullParser = Pull <$> strOption
  ( long "branch"
  <> short 'b'
  <> metavar "BRANCH"
  <> help "Branch to pull" )

subcommands :: Parser (Sub Command)
subcommands = subparser
  ( command "commit" (info commitParser (progDesc "Commit changes"))
    <> command "push" (info pushParser (progDesc "Push changes to remote"))
    <> command "pull" (info pullParser (progDesc "Pull changes from remote")) )

main :: IO ()
main = execParser (info (helper <*> subcommands) fullDesc) >>= print

在这个示例中,我们定义了三个子命令:commitpushpull。每个子命令都有自己的参数解析器。

遇到的问题及解决方法

如果你在使用 optparse-applicative 时遇到子命令无法识别的问题,可能是由于以下原因:

  1. 子命令名称冲突:确保每个子命令的名称是唯一的。
  2. 解析器配置错误:确保子命令的解析器正确配置,并且与主解析器正确组合。
  3. 命令行参数格式错误:确保在命令行中正确使用子命令及其参数。

解决方法:

  1. 检查子命令名称是否唯一。
  2. 确保子命令的解析器正确配置,并且与主解析器正确组合。例如:
代码语言:txt
复制
mainParser :: Parser Command
mainParser = subcommands <|> pure (Commit "default message")

main :: IO ()
main = execParser (info (helper <*> mainParser) fullDesc) >>= print
  1. 确保在命令行中正确使用子命令及其参数。例如:
代码语言:txt
复制
./your-app commit -m "Your commit message"

通过以上步骤,你应该能够解决 optparse-applicative 中子命令无法识别的问题。

参考链接

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • 同名同义词和视图解惑

    因此,用户访问v对象,不是视图,而是指向v_视图同义词,而v_视图才是基于真正v视图(基于x创建)创建。这才能达到通过v_视图将v P.S....,又是公共同义词名称。...问题来了,执行检索vbisal,访问是视图还是公共同义词? 公共同义词vbisal指向是含一个字段视图v_bisal,视图vbisal是含两个字段。...eygle书中介绍了Oracle对于对象名解析顺序, (1) Oracle首先查看在发出命令用户模式中是否存在表或视图。 (2) 如果表或视图不存在,Oracle会看私有同义词是否存在。...(3) 如果私有同义词存在,将使用这个同义词所引用对象。 (4) 如果私有同义词不存在,看同名公共同义词是否存在。 (5) 如果公共同义词存在,将使用这个同义词所引用对象。

    99130

    过程(二)Sub过程定义和调用

    sub过程完整结构如下: [ Private |Public|Friend ] [Static] Sub 过程名 [(参数列表)] 语句序列 End Sub 整个过程由Sub、End Sub和中间代码组成...Friend:只能在类模块中使用,表示该sub过程再整个工程中都是可见,但对对象实例控制者是不可见。 Static:表示在调用Sub过程局部变量值。...在VBA中经常通过调用定义好过程来执行程序,Sub过程调用分两种方式,一种是在VBA中调用Sub过程,另一种是在Excel中以调用宏方式, 1、使用VBA代码调用sub过程 在程序中调用sub过程又两种方式...2、以宏方式调用sub过程 比较常用,就是插入表单控件按钮等,然后在指定宏窗口中,绑定指定Sub过程,即可以用于调用。...(以宏方式调用Sub过程无法给过程传递参数,所以通过宏只能调用无参数Sub过程。) ---- 本节主要介绍Sub过程定义和调用,重点是Sub过程关键字和注意点。下一节会介绍过程如何传递参数。

    5.3K20

    SELECT 语句中 子查询(Sub Query)

    SELECT 语句中子查询 子查询(Sub Query)或者说内查询(Inner Query),也可以称作嵌套查询(Nested Query),是一种嵌套在其他 SQL 查询 WHERE 子句中查询...子查询 SELECT 子句中只能有一个列,除非主查询中有多个列,用于与子查询选中列相比较。 子查询不能使用 ORDER BY,不过主查询可以。...在子查询中,GROUP BY 可以起到同 ORDER BY 相同作用。 返回多行数据子查询只能同多值操作符一起使用,比如 IN 操作符。...INSERT 语句可以将子查询返回数据插入到其他表中。子查询中选取数据可以被任何字符、日期或者数值函数所修饰。...下面的示例将 CUSTOMERS 表中所有 AGE 大于或者等于 27 客户 SALARY 字段都变为了原来 0.25 倍: SQL> UPDATE CUSTOMERS SET SALARY =

    3.1K20

    同名同义词和视图解惑

    因此,用户访问v$对象,不是视图,而是指向v_$视图同义词,而v_$视图才是基于真正v$视图(基于x$创建)创建。这才能达到通过v_$视图将v$视图和普通用户隔离。 P.S....,又是公共同义词名称。...问题来了,执行检索vbisal,访问是视图还是公共同义词? 公共同义词v$bisal指向是含一个字段视图v_$bisal,视图v$bisal是含两个字段。...eygle书中介绍了Oracle对于对象名解析顺序, (1) Oracle首先查看在发出命令用户模式中是否存在表或视图。 (2) 如果表或视图不存在,Oracle会看私有同义词是否存在。...(3) 如果私有同义词存在,将使用这个同义词所引用对象。 (4) 如果私有同义词不存在,看同名公共同义词是否存在。 (5) 如果公共同义词存在,将使用这个同义词所引用对象。

    1K20

    同义词搜索是如何做到

    还有更加高级领域例如同义词、近音词等处理同样也是分词器需要考虑范畴。 Lucence 中分词器包含两个部分,分别是切词器 Tokenizer 和过滤器 TokenFilter。...同义词过滤器 SynonymGraphFilter 有一个面试常见题目就是 Lucene 同义词搜索是如何实现?...Lucene 提供了同义词过滤器默认实现 SynonymFilter,如今在新版本中它已经被 SynonymGraphFilter 替换,提供了更加精准实现。...第二个问题是 puppy 和 dog 、pup 是同义词,但是 position_incr 很明显不一样,只有第一个词汇增量是 1,其它同义词汇都是原地打转。...下面我们来看看同义词对短语查询会产生怎样影响。下面的代码将会用到上面构造 analyzer 分析器实例,在构建索引和查询阶段都会用到。

    1.4K22

    【DB笔试面试514】在Oracle中,同义词定义及其作用是什么?有关同义词需要注意些什么?

    ♣ 题目部分 在Oracle中,同义词定义及其作用是什么?有关同义词需要注意些什么? ♣ 答案部分 同义词是其它对象(例如表、实体、存储过程、函数、包、序列)别名。...同义词也可以是另一个同义词别名。同义词优点主要体现在以下几个方面: l 当使用对象时,不需要指出对象所有者。 l 引用对象不需要指出它所在数据库。...创建同义词语法如下所示: CREATE OR REPLACE [PUBLIC ] SYNONYM 同义词名称 FOR 用户名.表名称; 以下示例作用是将EMP定义为SCOTT.EMP同义词。...如果存在公共同义词和私有同义词同名情况,那么在访问同义词时,访问是私有同义词所指向对象。 ② 不能创建和当前用户下表名相同私有同义词,但是可以创建和当前用户下表名相同公共同义词。...通过访问同义词就相当于访问其他SCHEMA对象表,但是,当创建同义词和其他对象重名时候,有可能在查询时却指向了另一个同名对象,导致无法访问到正确数据。

    87010

    nsdi23 | Bolt:用于超低延迟 Sub-RTT 拥塞控制

    题目:Bolt: Sub-RTT Congestion Control for Ultra-Low Latency 作者:Serhat Arslan∗ Stanford University , Y uliang...据报道,生产中最先进 CC 算法在其控制循环延迟允许范围内运行良好。然而,由于 BDP 增加,即使是一个 RTT 延迟对于未来网络来说也将是无法容忍。...Bolt 主要创新是将这些部分编织成和谐且精确 sub-RTT 拥塞控制,这对于现代高性能数据中心来说是可行。...下图描述了传统基于 ACK 反馈与基于 SRC 反馈机制所经过路径差异。由于 SRC 数据包是在入口处生成,因此它们会通过拥塞交换机和发送方之间最短路径传播,建立可能绝对最小反馈环路。...每个交换机都会跟踪每个端口链路容量供需之间不匹配情况,其中交换机在单位时间内可以串行化字节数就是该链路供给量;同一时间间隔内到达字节数即为链路需求。

    98451

    Elasticsearch 自定义分词同义词环节这个细节不大好理解......

    扩展背景描述: 这是 Elasticsearch 自定义分词 Text analysis 章节 Token filter reference 小节 同义词 token 过滤 (Synonym token...自定义分词器名字:synonym。 tokenizer 使用:whitespace 空白分词器。 filter 也就是 token filter 使用:synonym 同义词实现。...参数 2 ——"lenient": true 含义:如果为 true,则在解析同义词配置时会忽略异常。重要是要注意,只有那些无法解析同义词规则才被忽略。 默认值:false。...参数 3 —— "synonyms" 指定同义词,也就是指定谁和谁成为同义词。 参数4 ——“expand ” 这个就是文章开头提及参数,缺省值就是 true。所以上述 DSL 并没有显示指定。...如果为 true,支持扩展,和每一个同义词同义词。 如果为 false,不支持扩展,仅和最后指向同义词同义。 6、小结 实践一把,探究真相! 和你一起,死磕 Elastic!

    66840

    Skyworks:5G Sub6 射频前端器件关键挑战

    射频前端产业观察 针对Sub6, 5G射频前端要做哪些优化工作?包括支持双连接、更宽带PA和滤波器设计、集成LNA和新支持SRS射频架构。Skyworks白皮书为您一一道来。...摘要 随着人们对无所不在无线连接需求不断增长,以及新型、之前无法想像应用不断涌现,如自动驾驶车辆、人工智能、远程医疗和虚拟现实,预计5G也将实现快速增长。...我们采取做法不是要赞成任何特定解决方案;相反,这里会介绍Skyworks认为今后几年间可能发生趋势。此外,我们框架主要侧重于6 GHz范围以下5G射频前端(RFFE)实际解决方案。...我们目标是描述一下对未来一些合理期望,并将其与当前4G LTE Advanced Pro关联起来,了解制造商如何满足新需求。...由于我们对于之前标准拥有数十年经验,加上我们掌握系统和技术专门知识,Skyworks完全能够满足与5G相关、更强大、更复杂架构需求。

    42120

    Elastic-5分钟教程:如何为你搜索应用设置同义词

    Elastic应用程序搜索中设置同义词 以最少技术努力创造更好客户体验 在本演示中,我们将使用Elastic企业搜索附带样本数据 其中包括59个美国国家公园 现在我们已经摄取了数据 让我们对这个新搜索引擎运行一个查询...让我们来寻找peak(山峰) 许多文档都包含这一术语 山峰(peak)和山顶(summit)是同义词 当用户搜索‘summit’时 他们希望得到与查询类似的结果 为了解决这个问题,让我们定义同义词 在引擎菜单上...单击同义词 不同同义词集合已经被定义为演示引擎一部分 让我们创建一个新同义词集 添加名称 Peak 并与包含summit值进行关联 点击保存,就是这样 您定义了一组新同义词 接下来,让我们测试一下我们...搜索引擎 点击查询测试器,搜索summit 现在你有了一些结果 返回此查询 这是一种更好体验 适用于您用户 感谢收看本期短片《如何创造同义词》 您了解了如何使用弹性应用程序搜索仪表板设置同义词 您还可以使用...API定义同义词 查看参考链接 如果您想了解更多关于API信息

    1.7K42

    【nginx】sub_filtersubs_filter替换不生效原因和解决方案

    本人一个nginx反代站,之前一直正常,突然有一天发现使用subs_filter模块替换内容全部失效了。 检查站点配置文件后没发现什么异常,而且同一台服务器上另外一个反代站点也正常。...无法找到问题原因,就上搜索引擎查找答案吧。简单查找后基本可以确定是源站点启用了gzip压缩原因。...有人说在配置文件反代规则里增加proxy_set_header Accept-Encoding "";,但我增加这行代码后问题依旧。我判断是:源站点启用了强制gzip压缩。...根据网上一位仁兄思路,有个解决方法是在本机反代2次。第一次反代时增加gzip off;设置项,以输出无压缩内容,第二次反代本机地址,实现关键字替换。经实验,本方案可行。

    2.4K10

    使用SQLServer同义词和SQL邮件,解决发布订阅中订阅库丢失数据问题

    定位缺失数据 首先,找到出问题同步语句,在发布服务器“复制监视器”上事务订阅详细信息里面,找到出错信息 尝试命令: if @@trancount > 0 rollback tran (事务序列号...: 0x0000992600000D09007F00000000,命令 ID: 19) 错误消息: 应用复制命令时在订阅服务器上找不到该行。...ID(如上面的ID:19),找到具体同步命令(Command列),类似于这样: {CALL [dbo]....可以使用同义词从发布库查询过来插入到本地订阅库,请看下面具体过程: 先在订阅库上建立一个同义词,比如下面为表 Biz_Customer 建立一个同义词 Biz_Customer_Master,建立时候...,要求指定同义词所在服务器名称,数据库名称,架构,表名称等信息。

    1.5K70

    python用re.sub实现分组匹配和替换(及问答系统中应用)

    试试用pyCharm正则表达式替换 其实这里替换已经使用了分组思想。...上面一行匹配模式print (\S*)中,括号括起部分匹配到内容就被识别为匹配组1。而下一行替换模式中,$1就指代了匹配组1内容。...曹丕父亲是曹操 这就意味着我们需要保留前两个分组,而把第三个分组用查找到答案替换掉,假设已经查到答案,方法如下: ans = "曹操" re.sub(template,r"\1\2是%s" % ans...,quest) 曹丕父亲是曹操 其中\1,\2就表示第1、第2匹配组内容(“曹丕”、“父亲”)。...曹彰父亲是曹操 曹丕父亲是曹操 曹植父亲是曹操 曹昂父亲是曹操 这是我实现一个极简基于知识库问答系统一部分,如果对其中实现细节(包括正则表达式适应性调整、知识图谱查询SPARQL)

    4K10
    领券