mexico - haskell online
Haskell: ¿Práctica correcta para especificar la versión en la fuente? (2)
Cabal genera automáticamente un módulo para cada paquete llamado Paths_packagename
. Solo importa este paquete y mira el valor de la version
que exporta.
Edición: por ejemplo:
module Data.Blah where
import Paths_t
func :: IO ()
func = print version
Y un ejemplo de ejecución:
> func
Version {versionBranch = [0,1], versionTags = []}
Asegúrese de poner Paths_packagename
en su sección de Other-Modules
del archivo cabal.
¿Cuál es la mejor / correcta práctica para especificar la versión dentro de su árbol de código fuente? Lo que quiero, por ejemplo, es poner el archivo VERSION en el nivel superior del árbol de origen y obtener la función "versión" para leerlo.
Hay una sección de versión en el archivo cabal. ¿Es posible leerlo desde mi fuente mediante las funciones de "ayuda" o "versión"? ¿Cuál es la práctica correcta de especificar la versión en un lugar y hacer que esté disponible globalmente?
PD: ¿Hay alguna función en la biblioteca de Cabal que le permita extraer cualquier sección del archivo de Cabal y presentarla en su fuente? Entonces podría simplemente sacar la sección de la versión del archivo de la camarilla.
- ACTUALIZACIÓN -
Gracias, Thomas, por un buen conocimiento sobre el módulo Pathes_x. Solo quería agregar eso, al parecer, no necesito poner nada en mi archivo de la camarilla. Todo funciona sin él. Todo lo que necesitaba era importar el Pathes_X como sugerías. Además, necesitaba importar Data.Version para obtener la función showVersion para formatear / imprimir correctamente el tipo de datos de la versión. Así que al final me sale algo como esto:
import Paths_kvman
import Data.Version
runVersion _ = putStrLn ("Version: " ++ (showVersion version))
Ahora, todo lo que necesito es cambiar el número de versión en el archivo cabal para propagarlo por todo mi origen. Exactamente lo que necesitaba. Gracias.
La mejor práctica es poner el número de versión en su archivo cabal, como ya ha indicado.
No tengo conocimiento de ninguna buena práctica mediante la cual pueda mantener un solo punto de verdad acerca de la versión y, a la vez, hacer que el número esté disponible tanto para Cabal como para su aplicación.
Recomendaría un único archivo Version.hs
en las fuentes con estos contenidos:
module Version
where
version :: String
version = "3.14159"
Entonces, si lo desea, podría usar algún tipo de script para actualizar el archivo de Cabal con este número, pero no sé cómo hacerlo desde dentro de Cabal.
Esta estrategia funcionará solo para paquetes de aplicaciones; Si está construyendo una biblioteca, deberá reflexionar sobre a qué parte del espacio de nombres de los módulos jerárquicos irá su Version.hs
.
En general, sospecho que el juego no vale la pena.
PS El número de versión debe ser inmutable, por lo que desea un valor, no una función.