2

ghc 7.0.4 で動作していたコードを 7.4.1 で動作させようとしています。

Snap moand 内から IO にアクセスする古い方法は、タイプチェックを行わないように思えます。

ghc 7.0.4 では、文書化された IO へのアクセス方法がコンパイルされます。

a :: Snap ()
a = liftIO fireTheMissiles

http://hackage.haskell.org/packages/archive/snap-core/0.8.1/doc/html/Snap-Core.html

GHC 7.4.1 では、

No instance for (MonadIO Snap)
  arising from a use of `liftIO'
Possible fix: add an instance declaration for (MonadIO Snap)

魅力的な回避策が何であるかに興味があります。

4

1 に答える 1

6

私の推測では、いくつかのパッケージのバージョンが競合している可能性があります (おそらくtransformers)。バージョン 0.3 を使用しようとしているときに、Snap が別のバージョン (おそらく 0.2.2) に対してビルドされている可能性があります。その結果、MonadIOスコープ内にある のインスタンスはありません (0.3 以降)。これは推測にすぎませんが、同じことが何度も発生するのを見てきました。

この状況を回避する最も簡単な方法の 1 つは、コードをカバラ化することです。同じパッケージの異なるバージョンを使用しようとすると、cabal は警告を表示します。

于 2012-06-01T09:04:32.130 に答える