Hoe kan mijn Haskell-programma of -bibliotheek het versienummer vinden?

Ik zou graag willen dat mijn gecabaliseerde programma een --versionswitch heeft.

Ik wil graag dat het dezelfde versie rapporteert als aanwezig is in het .cabal-bestand.

Als ik het versienummer afzonderlijk moet bijwerken in mijn Haskell-broncode en in het .cabal-bestand, zal ik ze uiteindelijk niet meer synchroon laten lopen.

Dus, hoe kan mijn programma, terwijl het onder cabal is gecompileerd, zijn versienummer uit het .cabal-bestand halen?


Antwoord 1, autoriteit 100%

Dit wordt goed ondersteund door Cabal. Als volgt (van xmonad):

Importeer Paths_$myprogram– een bestand dat Cabal maakt met veel metadata uit het .cabal-bestand, samen met een module voor het verwerken van versienummers:

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

Voeg een printopdracht toe om het ‘versie’-veld van Paths_$myprogramaf te drukken:

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

Over het algemeen bevat het gegenereerde Paths-bestand van Cabal de volgende waarden, in dist/build/autogen/

version,
getBinDir, getLibDir, getDataDir, getLibexecDir,
getDataFileName

Other episodes