this is actually a bug in the type of cmap, a fix is due in the next release (at least thats what Alberto indicated to me when I asked about this a monthish ago) (note how you have the container type c e, but we want c a and c b ). Instead use the vector map or matrix map ops directly
Hello,
I'm playing around a bit with the hmatrix package (http://hackage.haskell.org/package/hmatrix) but can't quite figure out how to make the cmap function in Numeric.Container work.
An example:
ghci> import Numeric.LinearAlgebra
ghci> let v = fromList [1.0,2.0,3.0]
ghci> v
fromList [1.0,2.0,3.0] :: Data.Vector.Storable.Vector
ghci> :t v
v :: Vector Double
ghci> cmap sqrt v
<interactive>:1:1:
No instance for (Container Vector e0)
arising from a use of `cmap'
Possible fix: add an instance declaration for (Container Vector e0)
In the expression: cmap sqrt v
In an equation for `it': it = cmap sqrt v
ghci> :t cmap
cmap
:: (Container c e, Element b, Element a) => (a -> b) -> c a -> c b
There is an instance for (Container Vector Double) but I assume that since the signature of cmap doesn't mention the type variable 'e' GHCi can't infer it. Googling hasn't helped me so far, except for digging up another post to this list with the same (?) problem, but no answer: http://www.haskell.org/pipermail/haskell-cafe/2011-April/091390.html
Is there a way to tell GHC what instance to use, or how should cmap be used?
Thanks!
Mats
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe