Haskell - 合格导入后键入不兼容性

时间:2014-06-25 11:52:54

标签: haskell vector hmatrix

我正在使用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中使用这些或者是否有一些简单的方法告诉编译器这些类型是否相同?

3 个答案:

答案 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向量一起使用。