我定义了:
type Network = [(Matrix Double,Vector Double)]
其中Matrix和Vector来自hmatrix库。从hmatrix的文档中可以看出,Matrix Double和Vector Double已经是Num的实例。由于我需要添加和减少网络安静,我还希望网络成为Num的一个实例。我试过了
instance Num Network where
(+) = zipWith (\(m,v) (n,w) -> (m+n,v+w))
(-) = zipWith (\(m,v) (n,w) -> (m-n,v-w))
(*) = zipWith (\(m,v) (n,w) -> (m*n,v*w))
但我收到错误:非法实例声明。
答案 0 :(得分:5)
Alexis King的评论是正确的,以便您编译当前的代码。但是,为newtype
制作Network
可能是更好的做法 - 这样您根本不需要使用任何语言扩展。
newtype Network = Network [(Matrix Double,Vector Double)]
instance Num Network where
(Network n1) + (Network n2) = Network $ zipWith (\(m,v) (n,w) -> (m+n,v+w)) n1 n2
(Network n1) - (Network n2) = Network $ zipWith (\(m,v) (n,w) -> (m-n,v-w)) n1 n2
(Network n1) * (Network n2) = Network $ zipWith (\(m,v) (n,w) -> (m*n,v*w)) n1 n2