制作vectorSpace的网络实例

时间:2016-07-22 14:57:08

标签: haskell

这是对此question的跟进问题。有人建议在那里使类型网络成为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'编写了一个非法实例。 有人可以解释一下我做错了吗?

1 个答案:

答案 0 :(得分:0)

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

{-# LANGUAGE TypeFamilies #-}

但是,您可能在zeroV实例中未定义negateVAdditiveGroup这一事实时遇到问题。我不确定你将如何定义这些......你甚至可以在没有定义它们的情况下离开(但是你会收到警告,并且在运行时可能会崩溃)。