Как моя программа или библиотека Haskell может найти номер версии?

Я бы хотел, чтобы моя программа с каскадом имела переключатель --version.

Я хотел бы, чтобы он сообщал ту же версию, что и в файле .cabal.

Если мне нужно обновить номер версии отдельно в исходном коде Haskell, а также в файле .cabal, я в конечном итоге вытащу их из синхронизации.

Итак, как моя программа, будучи скомпилированной под cabal, получает номер версии из файла .cabal?

Ответ 1

Это хорошо поддерживается Cabal. Как следует (от xmonad):

Импорт Paths_$myprogram - файл Cabal создает с большим количеством метаданных из файла .cabal вместе с модулем для обработки номеров версий:

import Paths_xmonad (version)
import Data.Version (showVersion)

Добавьте выражение печати для печати поля "версия", предоставленного Paths_$myprogram:

case args of
     ["--version"] -> putStrLn ("xmonad " ++ showVersion version)

В общем случае файл Paths, созданный Cabal, содержит следующие значения: dist/build/autogen/

version,
getBinDir, getLibDir, getDataDir, getLibexecDir,
getDataFileName