【问题标题】:make network instance of vectorSpace制作vectorSpace的网络实例
【发布时间】:2016-07-22 23:14:14
【问题描述】:

这是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

但是当我尝试编译时,我收到一个错误,说我为“标量”编写了一个非法实例。 谁能解释一下我做错了什么?

【问题讨论】:

  • 您应该在以后包含错误消息。它使弄清楚发生了什么变得更加容易和快捷。

标签: haskell


【解决方案1】:

错误来自于能够在类和实例中声明type 不是标准的Haskell,它是type families extension 的一部分。摆脱该错误并不难,您只需在文件顶部添加以下语言杂注:

{-# LANGUAGE TypeFamilies #-}

但是,您可能会遇到问题,因为您没有在 AdditiveGroup 实例中定义 zeroVnegateV。我不确定您将如何定义它们...您甚至可以在不定义它们的情况下逃脱(尽管您会收到警告,并且某些东西可能会在运行时崩溃)。

【讨论】:

    猜你喜欢
    • 2017-08-26
    • 2017-07-18
    • 1970-01-01
    • 2023-03-07
    • 2017-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-28
    相关资源
    最近更新 更多