У меня есть пакет со следующей структурой (хорошо, это сильно упрощено, но...)
app/
src/
Main.hs
data/
data.txt
app.cabal
Paths_app.hs
Setup.hs
В Paths _app.hs у меня есть :
module Paths_app where
getDataFileName :: FilePath -> IO FilePath
getDataFileName = return
, а в Main.hs у меня есть:
module Main where
import Paths_app
main = do
file <- getDataFileName "data/data.txt"
data <- readFile file
putStrLn $ "Your data is: " ++ data
соответствующие части моего файла app.cabal выглядят так:
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
Это отлично строится (используя cabal configure
, за которым следует cabal install
), но исполняемый файл жалуется, что не может найти файл data.txt. Я пробовал заменить строку
file <- getDataFileName "data/data.txt"
на
file <- getDataFileName "data.txt"
, но происходит то же самое. Есть ли что-то очевидное, что я делаю неправильно?