0

私は最近、受講しているプログラミング クラスのために Haskell Platform for Windows をインストールしました。コンパイラとしてGHCi、パッケージングシステムとしてCabalが含まれています。これは私の教科書が使用する演習パッケージであるため、Cabal で Craft3e パッケージをインストールしようとしましたが、役に立ちませんでした。Craft3e をインストールするにcabal unpack Craft3eは、コマンド プロンプトに「\Craft3e-0.1.0.8」というディレクトリを作成します。ディレクトリに入った後、 と入力するとcabal install --disable-documentation、次のメッセージが表示されます。

Resolving dependencies...
In order, the following would be installed: 
time-1.2.0.5 (new version)
random-1.0.1.1 (reinstall) changes: time-1.4 -> 1.2.0.5
QuickCheck-2.5.1.1 (reinstall)
Craft3e-0.1.0.8 (new package)
cabal: The following packages are likely to be broken b
haskell-platform-2012.4.0.0
Use --force-reinstalls if you want to install anyway.

を使用した後cabal install --disable-documentation --force-reinstalls、期待どおりにインストールされます。モジュールをロードしてテストします: ghci PicturesSVG. これは正常にロードされます。しかし、GHCi コンパイラを終了して再び GHCi コンパイラに戻ると、Craft3e パッケージからモジュールをロードできなくなります。代わりに、次のメッセージが表示されます。

GHCi, version 7.4.2: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.

<command line>:
    Could not find module `PicturesSVG'
    it is a hidden module in the package `Craft3e-0.1.0.8'
    Use -v to see a list of the files searched for.
 Failed, modules loaded: none.

どうしたの?と入力すると、パッケージがまだ表示されますghc-pkg list。と入力しようとしましghc-pkg expose Craft3e-0.1.0.8たが、プロンプトに次のように表示されます。

WARNING: cache is out of date: C:/Program Files (x86)/Haskell Platform/2012.4.0.
0\lib\package.conf.d\package.cache
  use 'ghc-pkg recache' to fix.

再キャッシュを実行し、「公開」コマンドを再入力しましたが、結果はまだありません。

どんな解決策も本当に感謝しています!

4

3 に答える 3

3
cabal: The following packages are likely to be broken b
haskell-platform-2012.4.0.0

それは非常に悪い兆候です。自分が何をしているかをよく知っている場合にのみ使用--force-reinstallsしてください。新しい学習者として、多かれ少なかれ定義上、そうではありません。cabalもっと厳しく警告するべきだろう。

問題の根底にあるのは、パッケージの依存関係の指定が厳しすぎて、デフォルトで ghc-7.4 以降で動作しないことです。これらのパッケージには、のファイルtimeで許可されているよりも大きなバージョンのパッケージが付属しているためです。その問題の適切な修正は、依存関係の境界を緩和することでした (作成者が行うべきでしたが、修正バージョンがハックされる前に、ユーザーはファイルを編集して、何も再インストールせずにパッケージをビルドできるため、インストール済みのパッケージが壊れる可能性があります)。craft3e.cabaltime.cabaltime-1.4.*ghc >= 7.4

の再インストールによりtime、多くのパッケージが破損した可能性があります。コマンド ラインから実行randomして、損傷の評価を取得します。単にingして再インストールするだけで修正されるかもしれませんが、おそらくプラットフォーム全体を再インストールする必要があるかもしれません。QuickCheckghc-pkg checkghc-pkg unregistertime-1.2.0.5randomQuickCheck

壊れたパッケージが何らかの方法で修正されたら、ディレクトリに移動してファイルをCraft3e-0.1.0.8編集し、行を変更しますCraft3e.cabal

time >= 1.1 && < 1.3,

するbuild-depends分野で

time >= 1.1 && < 1.5,

そしてそこに走るcabal install --disable-documentation


Could not find module `PicturesSVG'
it is a hidden module in the package `Craft3e-0.1.0.8'

右。パッケージはモジュールを公開しないため、パッケージに含まれるすべてのモジュールは非表示になります (それが本当に意図されているかどうかはわかりません)。ghci はパッケージ モジュールよりも現在のディレクトリ (ツリー) からソース ファイルをロードすることを優先するため、それらが存在するディレクトリからのみロードできます。そのディレクトリから ghci を呼び出すと、ファイルがロードされます。(または、別のディレクトリから ghci を呼び出すときに、ディレクトリへのパスを指定することもできますghci -ipath/to/Craft3e-0.1.0.8 PicturesSVG。)

于 2013-01-14T21:28:12.840 に答える
2

Craft3eパッケージは実際にはモジュールを公開ませ。cabal ファイルは、適切なライブラリ インターフェイスを提供するためではなく、主に配布および依存関係の目的で存在しているようです。そのため、モジュールをロードするには、それが含まれているファイルを常に明示的に開く必要があります。

于 2013-01-14T21:22:30.100 に答える
1

新しいバージョンのTimeを考慮して、Craft3eパッケージを更新しました。問題が発生したことをお詫び申し上げます。

于 2013-01-25T17:44:18.087 に答える