2016-07-22 32 views
0

这是对question的后续问题。有人在那里提出,将类型网络作为vectorSpace的一个实例会更有意义。使vectorSpace的网络实例

newtype Network = Network [(Matrix Double, Vector Double)] 

instance AdditiveGroup 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 

instance VectorSpace Network where 
    type Scalar Network = Double 
    lambda *^ (Network n) = Network $ map (\ (m,v) -> (lambda*m,lambda*v)) n 

但是当我尝试编译时出现错误,说我为'Scalar'写了一个非法实例。 有人可以解释我做错了什么吗?

+0

您应该在将来包含错误消息。它可以让我们更容易,更快速地找出发生的事情。 –

回答

0

错误来自于能够在类和实例中声明type不是标准Haskell的事实,它是type families extension的一部分。摆脱这个错误是不强硬,你只需要在你的文件的顶部添加以下语言编译:

{-# LANGUAGE TypeFamilies #-} 

但是,那么你可能有,你有没有定义的事实问题zeroVnegateV在您的AdditiveGroup实例中。我不确定你将如何定义这些...你甚至可能不经过定义就会离开(尽管你会得到警告,并且在运行时可能会崩溃)。