我有一个包含以下结构的包(好吧,这大大简化了,但是......)
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"
但同样的事情发生了。有什么明显的我做错了吗?
答案 0 :(得分:1)
我试图重现它,但它对我来说很好。
在您描述的设置中,我必须放弃对haskell98
的依赖,因为base
和haskell98
都提供了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
返回的文件名将数据加载到我的程序中时,我没有逃避反斜杠。