我正在使用来自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这个计算结果的类型,但它不起作用,我不明白在使用函数时如何声明类型。
答案 0 :(得分:1)
不 - Element Int
实际上没有实例 - 请参阅此处:http://hackage.haskell.org/package/hmatrix-0.16.0.3/docs/Numeric-LinearAlgebra-HMatrix.html#t:Element
如果可以,请选择Matrix Float
或Matrix Double
答案 1 :(得分:0)
按照[1]中的说明声明instance Element Int
。请注意,许多较为功能的功能仅针对Double
和Float
定义。
[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 ]