2016-07-22 4 views
0

これはこれに続く質問です。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」の不正なインスタンスが作成されたというエラーが表示されます。 誰かが私が間違ったことを私に説明できましたか?

+0

今後、エラーメッセージを含める必要があります。それは何が起こっているのか把握するのがずっと簡単で速くなります。 –

答えて

0

エラーは、クラスとインスタンスでtypeを宣言できることが、標準のHaskellではないことに起因します。これはtype families extensionの一部です。そのエラーを取り除くことはタフではありませんが、あなたは自分のファイルの先頭に次の言語プラグマを追加する必要があります。しかし

{-# LANGUAGE TypeFamilies #-} 

、その後、あなたが定義されていないという事実に問題がある可能性がありますAdditiveGroupインスタンスのzeroVまたはnegateV私はあなたがそれらをどのように定義するのか分かりません...あなたはそれらを定義することなく(たとえ警告を受けるでしょうし、実行時に何かがクラッシュするかもしれません)。

関連する問題