我定义了:
type Network = [(Matrix Double,Vector Double)]
Run Code Online (Sandbox Code Playgroud)
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))
Run Code Online (Sandbox Code Playgroud)
但我收到错误:非法实例声明.
Alexis King的评论是正确的,可以让你当前的代码编译.但是,做一个newtypefor 可能是更好的做法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
Run Code Online (Sandbox Code Playgroud)