我可以告诉我的 Haskell 程序中公开
import
ed 模块的包的版本吗?
显然,我可以通过
.cabal
文件限制包的版本,但是如果我希望它是免费的,并在运行时进行检查怎么办?
假设我有两个文本文件,分别包含
[SomeType]
,Map Int Whatever
,其中 Int
是给定 Data.Hashable
的 hash
的输出
只要我不更新 SomeType
hashable
文件锁定了该版本),我就可以使用前一个文件的相应元素来识别前一个文件的每个元素。后一个文件,反之亦然(或得出结论,两个文件中缺少一些文件)。
一旦我更新
.cabal
(例如,我在 hashable
文件中没有
hashable
的版本约束,并且我在构建程序之前运行
.cabal
),查找就会中断,因为
cabal update
' s 输出变化。
更多背景我一直在编写一个用于测验的程序(存储库位于
[
{ "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 指令通过