2016-07-22 34 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實例中。我不確定你將如何定義這些...你甚至可能不經過定義就會離開(儘管你會得到警告,並且在運行時可能會崩潰)。