You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Haskell程序中如何获取导入模块所属包的版本?

如何在Haskell程序运行时获取导入模块的包版本?

核心解决方案

在Haskell中要在运行时获取依赖包的版本,最直接的方式是使用package-version库,它能直接查询指定包的版本信息。

步骤与代码示例

  1. 添加依赖:在你的.cabal文件的build-depends中加入package-version:
build-depends: base >=4.14 && <5,
               hashable,
               package-version >=0.2
  1. 在代码中查询版本:导入Data.PackageVersion模块,调用packageVersion函数获取指定包的Version类型值,再用Data.Version的showVersion转为字符串输出:
import Data.PackageVersion (packageVersion)
import Data.Version (showVersion)
import Data.Hashable (Hashable)

main :: IO ()
main = do
  let hashableVersion = packageVersion "hashable"
  putStrLn $ "当前使用的hashable版本: " ++ showVersion hashableVersion
  -- 结合你的场景,可以把版本和哈希值一起存储

针对哈希关联场景的额外建议

因为hashable版本更新会改变哈希结果,除了锁定版本,还可以:

  • 存储哈希值时,同时记录对应的hashable版本
  • 程序启动时检查存储的版本与当前使用的版本是否一致,不一致则提示用户,或者做哈希值的兼容转换(如果可行)

补充说明

如果需要获取当前程序自身的版本,可以使用Cabal自动生成的Paths_<你的包名>模块,其中的version字段就是程序的版本,但这个模块仅能查询自身包版本,无法获取依赖包的版本。

内容的提问来源于stack exchange,提问作者Enlico

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 05:17:03