0

編集:解決策:問題の解決策は、.cabalファイルで正しいベクトルライブラリを指定することでした。わかりやすい兆候(以下の@Danielによって親切に指摘されています)は、ベクトルの正確なバージョンがエラーメッセージで参照されていることでした。実際、私のファイルはvector-0.10.somethingに対してビルドされていましたが、vector-fftwはvector-0.9.1に対してコンパイルされていました。


私はfftw-vectorライブラリを使おうとしていますが、このタイプのエラーで立ち往生しています:

-- test.hs
import qualified Numeric.FFT.Vector.Invertible as FFTI
import qualified Data.Vector.Unboxed as U

z = FFTI.run FFTI.dct1 U.empty

main = putStrLn "Won't compile"

これはエラーメッセージです:

No instance for (vector-0.9.1:Data.Vector.Generic.Base.Vector
                   U.Vector Double)
  arising from a use of `FFTI.run'
Possible fix:
  add an instance declaration for
  (vector-0.9.1:Data.Vector.Generic.Base.Vector U.Vector Double)
In the expression: FFTI.run FFTI.dct1 U.empty
In an equation for `z': z = FFTI.run FFTI.dct1 U.empty

しかし、私が知る限り、Data.Vector.Unboxed Double (Link)のData.Vector.Gener.Base.Vectorのインスタンスが実際にあります(私は間違っていると思います)。

これは、ghc-7.6.1、vector-0.9.1vector-fftwの場合です。

(vector-fftwに2つの小さな変更を加えて、base 4.6とghc-7.6.1でコンパイルする必要がありましたが、それは無関係であるはずです...)

ありがとうございました

編集:

私がvector-fftwに加えた2つの変更:

--- a/Numeric/FFT/Vector/Base.hsc
+++ b/Numeric/FFT/Vector/Base.hsc
@@ -34,10 +34,11 @@ import Control.Monad.Primitive (RealWorld,PrimMonad(..),
 import Control.Monad(forM_)
 import Foreign (Storable(..), Ptr, unsafePerformIO, FunPtr,
                 ForeignPtr, withForeignPtr, newForeignPtr)
-import Foreign.C (CInt, CUInt)
+-- import Foreign.C (CInt, CUInt)
 import Data.Bits ( (.&.) )
 import Data.Complex(Complex(..))
 import Foreign.Storable.Complex()
+import Foreign.C.Types



diff --git a/vector-fftw.cabal b/vector-fftw.cabal
index 5ca7c46..0436834 100644
--- a/vector-fftw.cabal
+++ b/vector-fftw.cabal
@@ -40,7 +40,7 @@ Library
   Other-modules:
         Numeric.FFT.Vector.Base

-  Build-depends: base>=4.3 && < 4.6, vector==0.9.*, primitive==0.4.*,
+  Build-depends: base>=4.3 && < 4.7, vector==0.9.*, primitive>=0.4 && < 0.6,
                  storable-complex==0.2.*
4

1 に答える 1

2

エラーメッセージは、インスタンスが欠落しているクラスを定義するパッケージの特定のバージョンを指定していることに注意してください。

No instance for (vector-0.9.1:Data.Vector.Generic.Base.Vector
                   U.Vector Double)

これは通常、使用されているパッケージの1つが、プロジェクトで現在使用されているものとは異なるバージョンに対してコンパイルされたことを意味します。

これがどのように発生するかは正確にはわかりませんが、で壊れたパッケージをチェックし、パッケージにとでghc-pkg check正しいIDがあることを確認してください。おそらく、ビルド後に再構築されました。パッケージハッシュが一致しません。ghc-pkg describe vectorghc-pkg describe vector-fftwvectorvector-fftw

于 2012-10-12T09:18:04.347 に答える