2012-04-27 7 views
8

を構築する私が持っている:は、私は次の構造(大丈夫、これは大幅に簡素化されますが、...)Paths_app.hsで</p> <pre><code>app/ src/ Main.hs data/ data.txt app.cabal Paths_app.hs Setup.hs </code></pre> <p>とのパッケージを持っている

module Paths_app where 
getDataFileName :: FilePath -> IO FilePath 
getDataFileName = return 

とMain.hsに私が持っている:このような私のapp.cabalファイルの外観の

module Main where 
import Paths_app 
main = do 
    file <- getDataFileName "data/data.txt" 
    data <- readFile file 
    putStrLn $ "Your data is: " ++ data 

関連部品:

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 install続くcabal configureを使用して)細かい構築しますが、実行可能ファイルは、それはdata.txtをファイルを見つけることができないと文句を言い。私は

file <- getDataFileName "data.txt" 

でライン

file <- getDataFileName "data/data.txt" 

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

+1

'Other-modules'フィールドに' Paths_app'と言いましたか? – hammar

+1

なぜあなたはPaths_app.hsを持っていますか?カブールがそれを創造してくれるのではないのですか? –

+0

@benmachine私が持っているのはプレースホルダなので、私のコードをインタプリタモードで動かすことができます。現在のディレクトリを返します。コードをビルドすると、カバール生成のコードに置き換えられます。 –

答えて

1

問題は、私は、Windowsシステム上で構築された、と私は私のプログラムにデータをロードするgetDataFileNameによって返されたファイル名を使用したとき、私はエスケープされなかったということでしたバックスラッシュ。

1

私はそれを再現しようとしましたが、うまく動作します。

はあなたが記述のセットアップでは、私はbasehaskell98両方がPreludeを提供したとしてhaskell98への依存をドロップしなければなりませんでした。さらに、ファイル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 
+2

あなたは* nixでコンパイルしていると思いますか?問題は、Windowsでバックスラッシュをエスケープしていたことが判明しました。 –

+1

ああ、その数字。私はコンパイルし、Mac OS上で実行します。 –

関連する問題

 関連する問題