tutorial online mexico logo ejemplos descargar constructora company haskell

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.