我有一个具有以下结构的包(好的,这大大简化了,但是……)
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"但同样的事情也会发生。有没有什么明显的地方我做错了?
发布于 2012-05-24 23:16:26
问题是我是在Windows系统上构建的,当我使用getDataFileName返回的文件名将数据加载到我的程序中时,我没有转义反斜杠。
发布于 2012-04-27 21:01:08
我试过重现它,但它对我来说很好。
在您描述的设置中,我不得不放弃对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.txthttps://stackoverflow.com/questions/10349221
复制相似问题