模块 HF标志 (
定义自定义标志,
定义EQ标志,
标志类型(..),
initH标志,
initHFlags相关默认值,
论据,
未定义的选项,
标志(..),
MakeThis孤儿(..),
全球HFlags,
全局参数,
全局未定义选项
) 哪里
进口 控制.例外
进口 控制.莫纳德
进口 数据.烧焦
进口 数据.功能
进口 数据.列表
进口 数据.IORef(IORef)
进口 数据.也许 吧
进口 有资格的 数据.地图.懒惰 作为 地图
进口 数据.地图.懒惰 (地图)
进口 有资格的 数据.文本
进口 语言.哈斯克尔.真实航向
进口 系统.慰问.GetOpt(获取选项)
进口 系统.环境
进口 系统.IO(输入输出)
进口 系统.IO(输入输出).不安全的
进口 系统.出口
进口 前奏曲
数据 制作此孤儿 = MakeThis孤儿
数据 标志数据 = 标志数据
{ fName(姓名) :: 字符串
, f短 :: 也许 吧 烧焦
, fDefValue(定义值) :: 字符串
, fArg类型 :: 字符串
, f说明 :: 字符串
, fModule名称 :: 字符串
, f检查 :: IO(输入输出) ()
}
实例 显示 标志数据 哪里
显示 fd公司 = 显示 (f名称 fd公司, f短 fd公司, fDefValue(定义值) fd公司, fArg类型 fd公司, f说明 fd公司, fModule名称 fd公司)
班 标志 一 哪里
获取标记数据 :: 一 -> 标志数据
定义自定义标志 :: 字符串 -> ExpQ公司 -> 字符串 -> ExpQ公司 -> ExpQ公司 -> 字符串 -> 问 [12月]
定义自定义标志 名称' defQ(定义Q) 参数帮助 readQ(读取Q) showQ(展示) 描述 =
做 (名称, 短的) <- 如果 | 长度 名称' == 0 -> 失败 “不支持没有名称的标志。”
| 长度 名称' == 1 -> 返回 (名称', 只是 $ 头 名称')
| 长度 名称' == 2 -> 返回 (名称', 没有什么)
| 名称' !! 1 == ':' -> 返回 (滴 2 名称', 只是 $ 头 名称')
| 否则 -> 返回 (名称', 没有什么)
defE(定义E) <- defQ(定义Q)
标志类型 <- 案例 defE(定义E) 属于
SigE公司 _ 标志类型 -> 返回 $ 返回 标志类型
_ -> 失败 defineCustomFlag的默认值必须是显式类型的表达式,如(12::Int)
模块名 <- 功能性维修计划 位置模块 位置
让 访问器名称 = mk名称 $ “旗子_” ++ 名称
让 数据名称 = mk名称 $ “HFlag_” ++ 名称
让 数据ConstrName = mk名称 $ “HFlagC_” ++ 名称
#如果MIN_VERSION_template_haskell(2,12,0)
12月数据 <- 数据D (cxt(文本) []) 数据名称 [] 没有什么 [正常C 数据结构名称 []] []
#elif MIN_VERSION_模板_哈斯克尔(2,11,0)
12月数据 <- 数据D (cxt(文本) []) 数据名称 [] 没有什么 [正常C 数据ConstrName []] (cxt(文本) [])
#其他
12月数据 <- 数据D (cxt(文本) []) 数据名称 [] [正常C 数据ConstrName []] []
#结尾
实例12 <- 实例D
(cxt(文本) [])
(应用程序T (conT公司 ''标志) (conT公司 数据名称))
[功能D '获取标志数据 [条款 [野生植物]
(正常B
[| 标志数据
名称
短的
$(应用程序E showQ(展示) defQ(定义Q))
arg帮助
描述
模块名
($(圆锥E 数据ConstrName) `序列` 评价 $(变量E 访问器名称) >> 返回 ())
|]) []]]
标志PragmaDec <- pragInlD 访问器名称 无内联 趣味十足 所有阶段
标志Sig <- 信号D 访问器名称 标志类型
十二月标志 <- 功能D 访问器名称 [条款 [] (正常B $ 应用程序E readQ(读取Q) [| 查找标志 名称 模块名 |]) []]
返回 [12月数据, 实例12, 标志PragmaDec, 标志Sig, 十二月标志]
定义EQ标志 :: 字符串 -> ExpQ公司 -> 字符串 -> 字符串 -> 问 [12月]
定义EQ标志 名称 defQ(定义Q) arg帮助 描述 =
定义自定义标志 名称 defQ(定义Q) arg帮助 [| 阅读 |] [| 显示 |] 描述
班 标志类型 t吨 哪里
定义标志 :: 字符串 -> t吨 -> 字符串 -> 问 [12月]
布尔秀 :: 布尔 -> 字符串
布尔秀 真的 = “正确”
布尔秀 False(错误) = “假”
boolRead(布尔阅读) :: 字符串 -> 布尔
boolRead(布尔阅读) = boolRead'(boolRead) . 地图 到更低
哪里
boolRead'(boolRead) (“y”:_) = 真的
boolRead'(boolRead) (“t”:_) = 真的
boolRead'(boolRead) ('1':_) = 真的
boolRead'(boolRead) (“n”:_) = False(错误)
boolRead'(boolRead) (“f”:_) = False(错误)
布尔读取' ('0':_) = False(错误)
boolRead'(boolRead) 秒 = 错误 $ “无法将字符串解析为布尔值:” ++ 秒
实例 标志类型 布尔 哪里
定义标志 n个 五 = 定义自定义标志 n个 [| 五 :: 布尔 |] “BOOL”(BOOL) [| boolRead(布尔阅读) |] [| 布尔秀 |]
charShow(字符显示) :: 烧焦 -> 字符串
charShow(字符显示) x个 = x个:[]
charRead(字符读取) :: 字符串 -> 烧焦
charRead(字符读取) [x个] = x个
charRead(字符读取) 秒 = 错误 $ “无法将字符串解析为字符:” ++ 秒
实例 标志类型 烧焦 哪里
定义标志 n个 五 = 定义自定义标志 n个 [| 五 :: 烧焦 |] “查尔” [| charRead(字符读取) |] [| charShow(字符显示) |]
实例 标志类型 国际 哪里
定义标志 n个 五 = 定义EQ标志 n个 [| 五 :: 国际 |] “内景”
实例 标志类型 整数 哪里
定义标志 n个 五 = 定义EQFlag n个 [| 五 :: 整数 |] “整数”
实例 标志类型 字符串 哪里
定义标志 n个 五 = 定义自定义标志 n个 [| 五 :: 字符串 |] “字符串” [| 身份证件 |] [| 身份证件 |]
实例 标志类型 双精度 哪里
定义标志 n个 五 = 定义EQ标志 n个 (信号E (清淡的 (基本原理 (到理性 五))) [t吨| 双精度 |] ) “双倍”
实例 标志类型 数据.文本.文本 哪里
定义标志 n个 五 =
让 秒 = 数据.文本.打开 五
在里面 定义自定义标志 n个 [| 数据.文本.包装 秒 :: 数据.文本.文本 |] “文本” [| 数据.文本.包装 |] [| 数据.文本.打开 |]
全球HFlags :: IORef(IORef) (也许 吧 (地图 字符串 字符串))
全球HFlags = 不安全性能IO $ 新IORef 没有什么
全局参数 :: IORef(IORef) (也许 吧 [字符串])
全局参数 = 不安全性能IO $ 新IORef 没有什么
论据 :: [字符串]
论据 = 不安全性能IO $ 做
马格斯 <- 读者参考 全局参数
案例 马格斯 属于
只是 参数 -> 返回 $ 参数
没有什么 -> 错误 $ “调用initHFlags之前使用的HFlags.arguments。”
全局未定义选项 :: IORef(IORef) (也许 吧 [字符串])
全局未定义选项 = 不安全性能IO $ 新IORef 没有什么
未定义的选项 :: [字符串]
未定义的选项 = 不安全性能IO $ 做
马格斯 <- 读者参考 全局未定义选项
案例 马格斯 属于
只是 参数 -> 返回 $ 参数
没有什么 -> 错误 $ “在调用initHFlags之前使用了HFlags.globalUndefOpts。”
查找标志 :: 字符串 -> 字符串 -> 字符串
查找标志 fName(姓名) fModule名称 = 不安全性能IO $ 做
旗帜 <- 读者参考 全球HFlags
案例 旗帜 属于
只是 标志地图 -> 案例 地图.查找 fName(姓名) 旗标图 属于
只是 五 -> 返回 五
没有什么 -> 错误 $ “标志” ++ fName(姓名) ++ “运行时找不到,请查看HFlags-source/examples/package/Tup.hs.抱歉。”
没有什么 -> 错误 $ “标志” ++ fName(姓名) ++ “(来自模块:” ++ fModule名称 ++ “)在调用initHFlags之前使用。”
类型 A列表 = [(字符串, 字符串)]
类型 从属默认值 = A列表 -> A列表 -> A列表 -> A列表
初始化标志 :: 从属默认值 -> 字符串 -> [标志数据] -> [字符串] -> IO(输入输出) [字符串]
初始化标志 从属默认值 程序描述 旗帜 参数 = 做
do帮助
让 (opts选项, 非期权, 未设防, 错误)
| doUndefok公司 = 获取选项' Permute公司 获取OptFlags 参数
| 否则 = (\(一,b条,c(c)) -> (一,b条,[],c(c))) $ 获取选项 Permute公司 获取OptFlags 参数
什么时候 (不 $ 无效的 错误) $ 做
地图M_ (hPutStrLn公司 标准错误) 错误
exit失败
让 默认值 = 地图 (\标志数据 { fName(姓名), fDefValue(定义值) } -> (fName(姓名), fDefValue(定义值))) 旗帜
环境价值 <- 获取环境
让 环境默认值 = 地图 (地图Fst (来自Just . stripPrefix(条前缀) “HFLAGS_”)) $ 滤波器 ((是前缀 “HFLAGS_”) . 有限状态试验) 环境价值
让 depdef(数据定义) = 从属默认值 默认值 环境默认值 opts选项
writeIORef(写入或引用) 全球HFlags $ 只是 $ 地图.来自列表 $ 默认值 ++ depdef(数据定义) ++ 环境默认值 ++ opts选项
writeIORef(写入或引用) 全局参数 $ 只是 非期权
writeIORef(写入或引用) 全局未定义选项 $ 只是 未设防
地图管理_ 强制标志 旗帜
返回 非期权
哪里
地图Fst (f) (一, b条) = ((f) 一, b条)
helpOption(帮助选项) = 选项 “h” [“帮助”, “用法”, “版本”] (无Arg ("", "")) “显示帮助和版本信息。”
do帮助 = 案例 获取选项 Permute公司 [helpOption(帮助选项)] 参数 属于
([], _, _) -> 返回 ()
_ -> 做 输入StrLn $ 使用信息 (程序描述 ++ “\n”) (helpOption(帮助选项):获取OptFlags)
退出失败
underbook选项 = 选项 "" [“未确定”] (无Arg ("", "")) “在无法识别的命令行选项上是否失败。”
doUndefok公司 = 案例 获取选项 Permute公司 [underbook选项] 参数 属于
([], _, _) -> False(错误)
_ -> 真的
标志获取OptArgDescr 标志数据 { fName(姓名), fArg类型 }
| fArg类型 == “BOOL”(BOOL) = OptArg(光学参数) (\一 -> (fName(姓名), 也许 吧 “正确” 身份证件 一)) fArgType(参数类型)
| 否则 = 请求参数 (\一 -> (fName(姓名), 一)) fArg类型
获取OptFlags = underbook选项:
(轻弹 地图 旗帜 $ \flagData(标记数据)@(标志数据 { fName(姓名), f短, fDefValue(定义值), f说明, fModule名称 }) ->
选项 (可能被列入名单 f短) [fName(姓名)]
(标志获取OptArgDescr flagData(标记数据))
(f说明 ++ “(默认值:” ++ fDefValue(定义值) ++ “,来自模块:” ++ fModule名称 ++ ")"))
强制标志 标志数据 { fName(姓名), fModule名称, f检查 } =
f检查 `捕捉`
(\电子 -> 错误 $
“分析标志的参数时出错:” ++ fName(姓名) ++
“,值:” ++ 查找标志 fName(姓名) 模块名称 ++
“,错误:” ++ 显示 (电子 :: 错误呼叫))
获取标志数据 :: ExpQ公司
获取标志数据 = 做
I类 _ 实例 <- 使具体化 ''标志
案例 被愚弄的人 实例 属于
[] -> 返回 ()
(被愚弄:_) -> 失败 (“标志的多重定义” ++ (信噪比 $ 头 被愚弄) ++
“,模块:” ++ (显示 $ 地图 有限状态试验 被愚弄))
列表E $ 地图 实例到标记数据 实例
哪里
实例到标记数据 (获取实例类型 -> (AppT公司 _ 安装)) = [| 获取标记数据 (未定义 :: $(返回 安装)) |]
实例到标记数据 _ = 错误 “不应该发生”
实例到模块名称对 (获取实例类型 -> AppT公司 _ (ConT公司 安装)) =
让 (弗拉格列夫, 修改版本) = 跨度 (/= '.') $ 颠倒 $ 显示 安装
modName(模块名称) = 颠倒 $ 滴 1 修改版本
旗帜 = 滴 1 $ dropWhile(删除While) (/= '_') $ 颠倒 $ 弗拉格列夫
在里面 (modName(模式名称), 旗帜)
实例到模块名称对 _ = 错误 “不应该发生”
被愚弄的人 实例 = 滤波器 ((>1) . 长度) $
分组依据 ((==) `在` 信噪比) $
排序依据 (比较 `上的` 信噪比) $
地图 实例到模块名称对 实例
获取实例类型 :: 12月 -> 类型
#如果MIN_VERSION_template_haskell(2,11,0)
获取实例类型 (实例D _ _ 第y天 _) = 第y天
#其他
获取实例类型 (实例D _ 第y天 _) = 第y天
#结尾
获取实例类型 _ = 错误 “不应该发生”
initHFlags相关默认值 :: ExpQ公司
initH滞后依赖默认值 = 做
[| \程序描述 depDefaults(默认值) ->
获取参数 >>= 初始化标志 depDefaults(默认值) 程序描述 $获取标志数据 |]
初始化HFlags :: ExpQ公司
初始化HFlags = 做
[| \程序描述 ->
获取参数 >>= 初始化标志 (常数 $ 常数 $ 常数 []) 程序描述 $获取标志数据 |]