Haskell - 关于hMatrix的实例声明

时间:2014-06-25 09:23:47

标签: haskell hmatrix

我正在使用来自hMatrix的函数fromBlocks而不是列表,其元素由类型Int -> Int -> Int -> Matrix Int的函数确定。然而,GHC抱怨说:

No instance for (Element Int) arising from a use of `fromBlocks'
    Possible fix: add an instance declaration for (Element Int)
    In the expression:
      fromBlocks [[matrixCreate n m d], [rowZero n m d]]

我试图用:: Matrix Int告诉GHC这个计算结果的类型,但它不起作用,我不明白在使用函数时如何声明类型。

2 个答案:

答案 0 :(得分:1)

不 - Element Int实际上没有实例 - 请参阅此处:http://hackage.haskell.org/package/hmatrix-0.16.0.3/docs/Numeric-LinearAlgebra-HMatrix.html#t:Element

如果可以,请选择Matrix FloatMatrix Double

答案 1 :(得分:0)

按照[1]中的说明声明instance Element Int。请注意,许多较为功能的功能仅针对DoubleFloat定义。

[1] https://github.com/albertoruiz/hmatrix/issues/28

修改:添加Alberto的评论:

instance Element Int

a = (2><3) [1..] :: Matrix Int

z = (1><1) [0] :: Matrix Int

m = fromBlocks [[a,z],[a,a]]

> m

(4><6)
 [ 1, 2, 3, 0, 0, 0
 , 4, 5, 6, 0, 0, 0
 , 1, 2, 3, 1, 2, 3
 , 4, 5, 6, 4, 5, 6 ]