我正在使用hMatrix,我的代码的第一行是:
import Numeric.LinearAlgebra
import qualified Data.Vector as V
问题是在我的代码中,矢量类型是V.Vector
,但是hMatrix定义的某些方法具有类型Vector -> ...
,并且GHC在我尝试使用这些方法时不理解,说它们是没有为类型V.Vector
定义。我该如何解决这个问题?
更新
来自hMatrix的文档:
Vector
类型是来自Roman Leshchinskiy的矢量包的Storable
向量,因此该库提供的所有数组处理工具都可以直接使用。
但是,某些基本操作符(例如(++)
中存在的Data.Vector.Storable
)不包含在hMatrix中。是否无法从hMatrix中使用这些或者是否有一些简单的方法告诉编译器这些类型是否相同?
答案 0 :(得分:3)
hmatrix使用自己的Data.Packed.Vector
类型,它与Data.Vector
不同。
在您的代码中使用Data.Packed.Vector
,或在调用函数之前将Data.Vector
转换为Data.Packed.Vector
。
答案 1 :(得分:1)
您可以为Vector
类型添加显式导入:
import Numeric.LinearAlgebra
import qualified Data.Vector as V
import Data.Vector (Vector)
虽然,我不知道外部模块可能会破坏,具体取决于您如何导入他们所依赖的模块。
答案 2 :(得分:1)
请注意,您只能因为导入其他模块而破坏hmatrix。你只是有一个类型不匹配,因为vector
提供了不同类型的向量,包括适用于所有这些的.Generic
接口。
你可能有类似
的内容import Data.Vector
f :: Vector Int -> Vector Int
f = whatever
如果导入Data.Vector.Generic
,您可以编写适用于所有矢量类型的函数,包括hmatrix使用的函数。
import Data.Vector.Generic
f :: Vector Int -> Vector Int
f xs = xs ++ empty
应该与hmatrix向量一起使用。