我可以从从该包导入模块的 haskell 程序中得知包的版本吗?

问题描述 投票:0回答:1

tl;博士

我可以告诉我的 Haskell 程序中公开

import
ed 模块的包的版本吗?

显然,我可以通过

.cabal
文件限制包的版本,但是如果我希望它是免费的,并在运行时进行检查怎么办?


背景

假设我有两个文本文件,分别包含

  • a
    [SomeType]
    ,
  • a
    Map Int Whatever
    ,其中
    Int
    是给定 Data.Hashable
    hash
    的输出
    只要我不更新 
  • SomeType
的版本(例如,没有可用更新或者我已通过

hashable

 文件锁定了该版本),我就可以使用前一个文件的相应元素来识别前一个文件的每个元素。后一个文件,反之亦然(或得出结论,两个文件中缺少一些文件)。
一旦我更新 
.cabal

(例如,我在

hashable

 文件中没有 
hashable
 的版本约束,并且我在构建程序之前运行 
.cabal
),查找就会中断,因为 
cabal update
' s 输出变化。
更多背景

我一直在编写一个用于测验的程序(存储库位于

此处

),该程序询问从本地 JSON 数据库中挑选的多项选择问题,如下所示,

hash

并更新存储每个问题成功率的本地报告(本质上是一个
[
  { "question": "What's female of the lion?",
    "alternatives": ["Lionale", "Lioness", "Liger", "None of them"],
    "answers": ["Lioness"] },
  ...
)。

没有特殊原因,我使用 
Map

(来自

hash the'question'text
)作为报告中存储的地图中的键,因此报告看起来像这样,
Data.Hashable

其中“长”数字是每个问题的
(fromList [(-9220494745531298831,(4,1 % 4)),(-9211334016399354391,(2,0 % 1)), -- ...
的输出(内对有总尝试次数和成功率)。

我没有想到的是,当 
hash

包更新时,给定输入的

hash

 的输出会发生变化,这会破坏识别问题的能力。
显然,简单的解决方案是 
编辑

hashable

文件以强制执行该包的特定版本

这就是我提出上述问题的原因。
    

您可以在预编译阶段使用 CPP 指令通过
haskell version compatibility cabal
1个回答
0
投票

.cabal

检查包版本,然后相应地调整代码,例如:
MIN_VERSION_pkgname

因此,您可以根据包依赖项的版本来更改编译器要考虑的代码。
    

© www.soinside.com 2019 - 2024. All rights reserved.