模块 GF.命令。摘要(模块 GF.命令。摘要,Expr公司,显示Expr,期限) 哪里

进口 前列腺素F(CId代码,mkCId公司,Expr公司,显示Expr)
进口 GF.语法。语法(期限)

类型 标识 = 字符串

类型 命令行 = [管道]

类型 管道 = [命令]

数据 命令
   = 命令 标识 [选项] 参数
   衍生 (命令->命令->Bool(命令->命令->Bool)->(命令->命令->Bool)->Eq命令对于所有a.(a->a->Bool)->(a->a->Bool)->等式a/=::命令->命令->布尔$c/=::命令->命令->布尔==::命令->命令->布尔$c==::命令->命令->布尔等式,Eq命令Eq命令->(命令->命令->排序)->(命令->命令->Bool)->(命令->命令->Bool)->(命令->命令->Bool)->(命令->命令->Bool)->(命令->命令->命令)->(命令->命令->命令)->Ord命令命令->命令->Bool命令->命令->排序命令->命令->命令对于所有a。等式a->(a->a->订购)->(a->a->Bool)->(a->a->Bool)->(a->a->Bool)->(a->a->Bool)->(a->a->a)->(a->a->a)->命令a分钟::命令->命令->命令$cmin::命令->命令->命令max::命令->命令->命令$cmax::命令->命令->命令>=::命令->命令->布尔$c>=::Command->Command->Bool>::命令->命令->布尔$c>::命令->命令->Bool<=::命令->命令->布尔$c<=::命令->命令->布尔<::命令->命令->布尔$c<::Command->Command->Bool比较::命令->命令->排序$ccompare::命令->命令->排序$cp1Ord::Eq命令订单,Int->命令->显示[命令]->显示命令->字符串(Int->Command->ShowS)->(命令->字符串)->([命令]->显示S)->显示命令对于所有a。(Int->a->ShowS)->(a->String)->([a]->ShowS)->显示showList::[命令]->显示S$cshowList::[Command]->显示show::命令->字符串$cs显示::命令->字符串showsPrec::Int->命令->ShowS$cshowsPrec::Int->命令->显示显示)

数据 选项
  = OOpt(零磅) 标识
  | OFlag公司 标识 价值
  衍生 (选项->选项->Bool(选项->选项->Bool)->(选项->选项->Bool)->Eq选项对于所有a.(a->a->Bool)->(a->a->Bool)->等式a/=::选项->选项->Bool$c/=::选项->选项->布尔==::选项->选项->布尔$c=::选项->选项->布尔等式,Eq选项Eq选项->(选项->选项->订购)->(选项->选项->Bool)->(选项->选项->Bool)->(选项->选项->Bool)->(选项->选项->Bool)->(选项->选项->选项)->(选项->选项->选项)->订单选项选项->选项->Bool选项->选项->订购选项->选项->选项对于所有a。等式a->(a->a->订购)->(a->a->Bool)->(a->a->Bool)->(a->a->Bool)->(a->a->Bool)->(a->a->a)->(a->a->a)->命令a最小值::选项->选项->选项$cmin::选项->选项->选项max::选项->选项->选项$cmax::选项->选项->选项>=::选项->选项->布尔$c>=::Option->Option->Bool>::选项->选项->布尔$c>::选项->选项->布尔<=::选项->选项->布尔$c<=::选项->选项->布尔<::选项->选项->布尔$c<::选项->选项->Bool比较::选项->选项->排序$ccompare::选项->选项->排序$cp1第三::设备选项订单,Int->Option->ShowS(内部->选项->显示)[选项]->显示选项->字符串(内部->选项->显示)->(选项->字符串)->([选项]->显示S)->显示选项对于所有a。(Int->a->ShowS)->(a->String)->([a]->ShowS)->显示showList::[选项]->显示$cshowList::[Option]->显示显示::选项->字符串$cshow::Option->字符串showsPrec::Int->选项->ShowS$cshowsPrec::Int->选项->显示显示)

数据 价值
  = VId公司  标识
  | VInt公司 国际
  | VStr公司 字符串
  衍生 (值->值->布尔(值->值->布尔值)->(值->数值->布尔)->等式值对于所有a.(a->a->Bool)->(a->a->Bool)->等式a/=::值->值->布尔$c/=::值->值->布尔==::值->值->布尔$c==::Value->Value->Bool等式,等式值等式值->(值->值->排序)->(值->值->布尔)->(值->值->布尔)->(值->值->布尔)->(值->值->布尔)->(值->值->值)->(值->值->值)->订单值值->值->布尔价值->价值->排序值->值->值对于所有a。等式a->(a->a->订购)->(a->a->Bool)->(a->a->Bool)->(a->a->Bool)->(a->a->Bool)->(a->a->a)->(a->a->a)->命令a最小值::值->值->值$cmin::值->值->值max::值->值->值$cmax::值->值->值>=::值->值->布尔$c>=::Value->Value->Bool>::值->值->布尔$c>::Value->Value->Bool<=::Value->Value->Bool$c<=::Value->Value->Bool<::Value->Value->Bool$c<::值->值->布尔比较::值->值->排序$ccompare::Value->Value->排序$cp1Ord::等式值订单,Int->值->显示[值]->显示值->字符串(Int->Value->ShowS)->(值->字符串)->([值]->显示S)->显示值对于所有a。(Int->a->ShowS)->(a->String)->([a]->ShowS)->显示showList::[Value]->显示$cshowList::[Value]->显示show::Value->字符串$cshow::Value->字符串showsPrec::Int->Value->ShowS$cshowsPrec::Int->值->显示显示)

数据 参数
  = AExpr公司 Expr公司
  | A术语 期限
  | ANoArg公司
  | AMacro公司 标识
  衍生 (参数->参数->Bool(参数->参数->Bool)->(参数->参数->布尔)->等式参数对于所有a.(a->a->Bool)->(a->a->Bool)->等式a/=::Argument->Argument->Bool$c/=::Argument->Argument->Bool==::Argument->Argument->Bool$c==::Argument->Argument->Bool等式,Eq参数Eq参数->(参数->参数->排序)->(参数->参数->Bool)->(参数->参数->Bool)->(参数->参数->Bool)->(参数->参数->Bool)->(参数->参数->参数)->(参数->参数->参数)->Ord参数参数->参数->Bool参数->参数->排序参数->参数->参数对于所有a。等式a->(a->a->订购)->(a->a->Bool)->(a->a->Bool)->(a->a->Bool)->(a->a->Bool)->(a->a->a)->(a->a->a)->命令amin::Argument->Argument->参数$cmin::Argument->参数->参数max::参数->参数->参数$cmax::Argument->Argument->参数>=::Argument->Argument->Bool$c>=::Argument->Argument->Bool>::Argument->Argument->Bool$c>::Argument->Argument->Bool<=::Argument->Argument->Bool$c<=::Argument->Argument->Bool<::Argument->Argument->Bool$c<::Argument->Argument->Boolcompare::Argument->Argument->排序$ccompare::Argument->Argument->排序$cp1Ord::Eq参数订单,Int->参数->显示[参数]->显示参数->字符串(Int->Argument->ShowS)->(参数->字符串)->([Argument]->ShowS)->显示参数对于所有a。(Int->a->ShowS)->(a->String)->([a]->ShowS)->显示showList::[Argument]->显示S$cshowList::[Argument]->显示Sshow::Argument->字符串$cshow::Argument->String(参数->字符串)showsPrec::Int->参数->ShowS$cshowsPrec::Int->参数->显示显示)

valCIdOpts选项 时间: 字符串 -> CId代码 -> [选项] -> CId代码
valCIdOpts::字符串->CId->[选项]->CIdvalCIdOpts选项 字符串旗帜 CId代码定义 [选项]opts选项 =
  案例 [字符串v(v) | OFlag公司 字符串(f) (VId公司 字符串v(v)) <- [选项]opts选项, 字符串(f) 字符串->字符串->Bool对于所有a.等式a=>a->a->Bool== 字符串旗帜] 属于
    (字符串v(v):[字符串]_) -> 字符串->CIdmkCI代码 字符串v(v)
    [字符串]_     -> CId公司定义

valIntOpts公司 时间: 字符串 -> 国际 -> [选项] -> 国际
valIntOpts::字符串->整数->[选项]->整数valIntOpts公司 字符串旗帜 国际定义 [选项]opts选项 =
  案例 [国际v(v) | OFlag公司 字符串(f) (VInt公司 国际v(v)) <- [选项]opts选项, 字符串(f) 字符串->字符串->Bool对于所有a.等式a=>a->a->Bool== 字符串旗帜] 属于
    (国际v(v):[国际]_) -> 国际v(v)
    [国际]_     -> 国际定义

valStrOpts选项 时间: 字符串 -> 字符串 -> [选项] -> 字符串
valStrOpts::String->String->[Option]->StringvalStrOpts选项 字符串旗帜 字符串定义 [选项]opts选项 =
  案例 字符串->[选项]->[值]列表标志 字符串旗帜 [选项]opts选项 属于
    价值v(v):[值]_ -> 值->字符串valueString值字符串 价值v(v)
    [值]_   -> 字符串定义

listFlags::String->[Option]->[Value]列表标志 字符串旗帜 [选项]opts选项 = [价值v(v) | OFlag公司 字符串(f) 价值v(v) <- [选项]opts选项, 字符串(f) 字符串->字符串->Bool对于所有a.等式a=>a->a->Bool== 字符串旗帜]

valueString::Value->StringvalueString值字符串 价值v(v) =
  案例 价值v(v) 属于
    VStr公司 字符串v(v) -> 字符串v(v)
    VId公司  字符串v(v) -> 字符串v(v)
    VInt公司 国际v(v) -> Int->字符串for all a.显示a=>a->字符串显示 国际v(v)

isOpt公司 时间: 字符串 -> [选项] -> 布尔
isOpt::String->[Option]->BoolisOpt公司 字符串o个 [选项]opts选项 = 选项->[选项]->Boolforall(t::*->*)a.(可折叠t,方程a)=>a->t a->Bool元素 (字符串->选项OOpt公司 字符串o个) [选项]opts选项

is标志 时间: 字符串 -> [选项] -> 布尔
isFlag::String->[Option]->Boolis标志 字符串o个 [选项]opts选项 = 字符串->[String]->Bool对于所有(t::*->*)a.(可折叠t,等式a)=>a->ta->Bool元素 字符串o个 [字符串x个 | OFlag公司 字符串x个 价值_ <- [选项]opts选项]

选项和标志 时间: [选项] -> ([选项],[选项])
optsAndFlags::[Option]->([Option],[Options])选项和标志 = (选项->([选项],[选项])->([可选],[可选])->([选项],[选项])->[选项]->([选项][Option])对于所有(t::*->*)a b。可折叠t=>(a->b->b)->b->t a->b文件夹 选项->([选项],[选项])->([可选],[可选])添加 ([],[]) 哪里
  添加::选项->([Option],[Option])->([Option],[Option])添加 选项o个 ([选项]操作系统,[选项]英尺) = 案例 选项o个 属于
    OOpt(零磅) 字符串_    -> (选项o个选项->[选项]->[选项]对于所有a.a->[a]->[a]:[选项]操作系统,[选项]英尺)
    OFlag公司 字符串_ 价值_ -> ([选项]操作系统,选项o个选项->[选项]->[选项]对于所有a.a->[a]->[a]:[选项]英尺)

prOpt选项 时间: 选项 -> 字符串
prOpt::Option->字符串prOpt选项 选项o个 = 案例 选项o个 属于
  OOpt公司 字符串    -> 字符串
  OFlag公司 字符串(f) 价值x个 -> 字符串(f) 字符串->显示对于所有a.[a]->[a]->[a]++ 字符串"=" 字符串->显示S对于所有a.[a]->[a]->[a]++ 值->字符串for all a.显示a=>a->字符串显示 价值x个

mk选项 时间: 字符串 -> 选项
mkOpt::String->选项mk选项 = 字符串->选项OOpt(零磅)

--gf命令的缩写约定
getCommandOp::显示获取命令操作 字符串 = 案例 (字符->Bool)->字符串->(字符串,字符串)对于所有a.(a->Bool)->[a]->([a],[a])打破 (字符->字符->布尔对于所有a.等式a=>a->a->Bool==烧焦'_') 字符串 属于
     (烧焦:字符串_,烧焦_:烧焦b条:字符串_) -> [烧焦,烧焦b条]  --axx年-->ab
     (字符串,字符串)_ -> 案例 字符串 属于
       [烧焦,烧焦b条] -> 字符串          --ab-->ab
       烧焦:字符串_ -> [烧焦]          --axx-->a轴