11

私は次の構造のパッケージを持っています(わかりました、これは大幅に簡略化されていますが...)

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"

しかし、同じことが起こります。私が間違っていることは明らかですか?

4

2 に答える 2

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
于 2012-04-27T13:01:07.867 に答える
1

問題は、Windowsシステムでビルドしていて、によって返されたファイル名を使用してgetDataFileNameデータをプログラムにロードしたときに、円記号をエスケープしていなかったことです。

于 2012-05-24T15:16:26.297 に答える