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?
¿Ha mencionado 'Paths_app' en el campo' Other-modules'? – hammar
¿Por qué tiene un Paths_app.hs? ¿No se supone que Cabal lo cree? –
@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. –