www org gratis descargar compilador haskell cabal

haskell - org - Incluyendo archivos de datos solo en cabal test suites



stack haskell install (1)

Tengo algunos archivos de datos que solo pertenecen a mi programa de prueba y sería confuso distribuirlos con la biblioteca principal.

Desafortunadamente, el campo de data-files .cabal solo se aplica a un archivo cabal completo, no a una sola sección como la test-suite . Si trato de usarlo en una estrofa de prueba-suite simplemente obtengo:

Warning: ssh.cabal: Unknown fields: data-files (line 71)

¿Existe una forma natural de asociar estos archivos con mi programa de prueba para que se copien solo si se especifica --enable-tests ?

Si no hay una mejor manera, probablemente usaré Template Haskell para incrustarlos en el ejecutable y luego escribirlos nuevamente en el tiempo de ejecución o algo así, pero se siente bastante feo.


No hay ningún atributo de Cabal que le permita asociar archivos de datos con un conjunto de pruebas (o cualquier stanza no global de su compilación).

La solución común a este problema es declarar esos archivos en el atributo extra-source-files . Ese atributo también es global y garantiza que los archivos enumerados se incluyan en el archivo tar de la versión para que el conjunto de pruebas pueda encontrarlos cuando se ejecute. Sin embargo, a diferencia data-files extra-source-files no están instalados, lo que probablemente sea lo que usted quiere, ya que su conjunto de pruebas tampoco está instalado. Por lo tanto, los archivos están disponibles durante la compilación (y la ejecución del conjunto de pruebas), pero no ocuparán espacio en la instalación.

Los controladores de compilación como cabal-install y stack ejecutarán el conjunto de pruebas con el directorio de trabajo actual apuntando al directorio de nivel superior de su proyecto, es decir, en el directorio que contiene el archivo Cabal de su proyecto. Por lo tanto, si tiene un archivo de datos en test/my-data-file.txt , entonces su conjunto de pruebas puede acceder al archivo utilizando exactamente esa ruta.