
On Thu, 14 May 2015 02:31:55 -0400
Leza Morais Lutonda
On 05/14/2015 12:51 AM, briand@aracnet.com wrote: I think the problem is in the way of seeing the types and type classes. First, the type of `ys` is not `Vector.Storable (Complex Double)`, it is Vector (Complex Double).
Well that may be, but when I try to use Vector (Complex Double) with hmatrix it doesn't work. I have to make sure to use/import Vector.Storable. Meanwhile, back at the fft example. import qualified Data.Vector.Storable as V import Data.Complex import Math.FFT(dft) import Math.FFT.Base(FFTWReal) import Data.Array.IArray(elems) import Data.Array.CArray(listArray) vectorToArray v = listArray (0, V.length v - 1) (V.toList v) arrayToVector = V.fromList . elems fft :: FFTWReal r => V.Vector (Complex r) -> V.Vector (Complex r) fft = arrayToVector . dft . vectorToArray And the following error messages are why i get very little done in an evening of haskell hacking. To understand those error messages I'd have to be so good with haskell that I wouldn't actually need those error messages, or so it seems to me. Clearly I have something important to learn about what you are saying about type classes. So I'll stare at this for a few more hours, and try random type assignments until it works. Meanwhile, along the way, I may type up one of Shakespeare's plays... Thanks very much for your help. simple.hs:9:17: No instance for (V.Storable a0) arising from a use of ‘V.fromList’ The type variable ‘a0’ is ambiguous Relevant bindings include arrayToVector :: Data.Array.CArray.Base.CArray Int a0 -> V.Vector a0 (bound at simple.hs:9:1) Note: there are several potential instances: instance V.Storable a => V.Storable (Complex a) -- Defined in ‘Data.Complex’ instance V.Storable GHC.Fingerprint.Type.Fingerprint -- Defined in ‘Foreign.Storable’ instance V.Storable GHC.Int.Int16 -- Defined in ‘Foreign.Storable’ ...plus 18 others In the first argument of ‘(.)’, namely ‘V.fromList’ In the expression: V.fromList . elems In an equation for ‘arrayToVector’: arrayToVector = V.fromList . elems simple.hs:12:7: Couldn't match type ‘a0’ with ‘Complex r’ because type variable ‘r’ would escape its scope This (rigid, skolem) type variable is bound by the type signature for fft :: FFTWReal r => V.Vector (Complex r) -> V.Vector (Complex r) at simple.hs:11:8-65 Expected type: Data.Array.CArray.Base.CArray Int a0 -> V.Vector (Complex r) Actual type: Data.Array.CArray.Base.CArray Int a0 -> V.Vector a0 Relevant bindings include fft :: V.Vector (Complex r) -> V.Vector (Complex r) (bound at simple.hs:12:1) In the first argument of ‘(.)’, namely ‘arrayToVector’ In the expression: arrayToVector . dft . vectorToArray