2

さまざまな Haskell チュートリアルを読みながら書いている最初のプログラムで、「種類の不一致」エラーが表示されます

import qualified Data.Vector as V

class SupervisedLearner l where
    learn :: l (Input n) -> Output n

data Input n = Supervised (V.Vector n ,V.Vector n) | Unsupervised (V.Vector n)
data Output n =  Regression n | KClass (V.Vector n) | Bernoulli (n, n)
newtype Perceptron  = Perceptron (V.Vector Float)

instance SupervisedLearner Perceptron  where
    learn = undefined

私を混乱させているのは、エラーの型シグネチャに従おうとするときです。

Kind mis-match
The first argument of `SupervisedLearner' should have kind `*
                                                            -> *',
but `Perceptron' has kind `*'
In the instance declaration for `SupervisedLearner Perceptron'

私はそれを修正し始めるためにどこを見ればよいのか理解できないようです. 私の質問は 2 つあります。エラーはどこにあるのか、そして一般的な意味で、私は Haskell 型クラス システムを正しく使用していますか?

4

1 に答える 1

2

クラス定義によると、 のインスタンスを作成するlearnタイプのメソッドを定義する必要があります。したがって、パーセプトロンを のインスタンスにするには、タイプが である必要があります。l (Input n) -> Output nlSupervisedLearnerSupervisedLearnerlearnPerceptron (Input n) -> Output n

ただし、このPerceptron型は型引数を取らないためPerceptron (Input n)、有効な型ではありません。それがエラーメッセージが訴えていることです (kind*は型が型引数を取らないことを* -> *意味し、kind は型が 1 つの型引数を取ることを意味します)。

于 2012-07-07T21:42:38.357 に答える