在cabal构建中包含数据文件

时间:2012-04-27 10:47:02

标签: haskell cabal

我有一个包含以下结构的包(好吧,这大大简化了,但是......)

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.h中我有:

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"

但同样的事情发生了。有什么明显的我做错了吗?

2 个答案:

答案 0 :(得分:1)

我试图重现它,但它对我来说很好。

在您描述的设置中,我必须放弃对haskell98的依赖,因为basehaskell98都提供了Prelude。此外,文件Main无法编译,因为它使用关键字data作为变量名,因此我将变量重命名为dat。但后来它运作得很好。

有关我的设置的一些信息:

$ 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

答案 1 :(得分:1)

问题是我在Windows系统上构建,当我使用getDataFileName返回的文件名将数据加载到我的程序中时,我没有逃避反斜杠。