2012-04-27 6 views
8

Tengo un paquete con la estructura siguiente (bueno, esto se simplifica en gran medida, pero ...)La inclusión de archivos de datos en Cabal construye

app/ 
    src/ 
    Main.hs 
    data/ 
    data.txt 
    app.cabal 
    Paths_app.hs 
    Setup.hs 

En Paths_app.hs tengo:

module Paths_app where 
getDataFileName :: FilePath -> IO FilePath 
getDataFileName = return 

y en Main.hs tengo:

module Main where 
import Paths_app 
main = do 
    file <- getDataFileName "data/data.txt" 
    data <- readFile file 
    putStrLn $ "Your data is: " ++ data 

las partes pertinentes de mi mirada archivo app.cabal así:

name: app 
version: 1.0 
build-type: Simple 
data-files: data/data.txt 

executable foo 
    build-depends: base, haskell98 
    main-is: Main.hs 
    hs-source-dirs: src 

Esto construye muy bien (usando cabal configure seguido por cabal install), pero el ejecutable se queja de que no puede encontrar el archivo datos.txt. He intentado reemplazar la línea

file <- getDataFileName "data/data.txt" 

con

file <- getDataFileName "data.txt" 

pero lo mismo ocurre. ¿Hay algo obvio que estoy haciendo mal?

+1

¿Ha mencionado 'Paths_app' en el campo' Other-modules'? – hammar

+1

¿Por qué tiene un Paths_app.hs? ¿No se supone que Cabal lo cree? –

+0

@benmachine El que tengo es un marcador de posición, por lo que puedo ejecutar mi código en modo interpretado, simplemente devuelve el directorio actual. Cuando construyo el código, es reemplazado por el generado por la élite. –

Respuesta

1

El problema era que yo estaba construyendo en un sistema Windows, y cuando he usado el nombre de archivo devuelto por getDataFileName para cargar datos en mi programa, yo no estaba escapando las barras invertidas.

1

He intentado reproducirlo, pero funciona bien para mí.

En la configuración que usted describe, que tuvieron que abandonar la dependencia de haskell98 ya que tanto base y haskell98 proporcionaban Prelude. Además, el archivo Main no compilaría, ya que utilizaba la palabra clave data como nombre de variable, por lo que cambié el nombre de la variable a dat. Pero luego funcionó bien.

algo de información sobre mi configuración:

$ ghc --version 
The Glorious Glasgow Haskell Compilation System, version 7.4.1 

$ cabal --version 
cabal-install version 0.13.3 
using version 1.14.0 of the Cabal library 

$ ls ~/.cabal/bin/ 
... foo ... 

$ ls ~/.cabal/share/app-1.0/data/ 
data.txt 
+2

Supongo que estás compilando en * nix? Resultó que el problema era con el escape de barras diagonales inversas en Windows. –

+1

Ah, eso figura. Compilé y ejecuté en Mac OS. –

Cuestiones relacionadas