編集:解決策:問題の解決策は、.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.1、vector-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.*