Haskell:在源代码中指定版本的正确做法?

时间:2012-03-25 03:28:12

标签: haskell

在源代码树中指定版本的最佳/正确做法是什么? 我想要的是,例如,将VERSION文件放在源树的顶层,并获取“版本”函数来读取它。

cabal文件中有一个版本部分。是否可以通过“帮助”或“版本”功能从我的源代码中读取它? 在一个地方指定版本并使其全局可用的正确做法是什么?

P.S。 Cabal库中是否有任何功能允许您从cabal文件中提取任何部分并将其显示在源代码中?然后我可以简单地从cabal文件中提取版本部分。

- 更新 -

感谢Thomas对Pathes_x模块的一些了解。 只是想补充一点,显然,我不需要在我的cabal文件中添加任何内容。一切都没有它。我需要的就是在你吸气的时候输入Pathes_X。 此外,我需要导入Data.Version以获取showVersion函数以正确格式化/打印Version数据类型。所以最后我得到这样的东西:

import Paths_kvman
import Data.Version

runVersion _ = putStrLn ("Version: " ++ (showVersion version))

现在,我需要的是更改cabal文件中的版本号,以便在我的源代码中传播它。正是我需要的。感谢。

2 个答案:

答案 0 :(得分:22)

Cabal会自动为名为Paths_packagename的每个包生成一个模块。只需导入此包并查看它导出的version值。

编辑:例如:

module Data.Blah where

import Paths_t

func :: IO ()
func = print version

示例运行:

> func
Version {versionBranch = [0,1], versionTags = []}

请务必将Paths_packagename放入cabal文件的Other-Modules部分。

答案 1 :(得分:1)

最佳做法是将版本号放在cabal文件中,正如您已经注意到的那样。

我不知道您可以通过哪些良好做法来维护关于版本的单一事实,但是可以将数字提供给cabal和您的应用程序。

我会在具有以下内容的来源中推荐单个文件Version.hs

 module Version 
 where
 version :: String
 version = "3.14159"

如果你愿意的话,你可以使用某种脚本用这个号码来更新cabal文件,但是我不知道如何从cabal本身做到这一点。

此策略仅适用于应用程序包;如果您正在构建一个库,那么您需要考虑一下Version.hs将要进入的分层模块的命名空间。

总的来说,我怀疑这场比赛是不值得的。


P.S。版本号应该是不可变的,因此您需要一个值,而不是一个函数。