class Category categ where
これは型クラス宣言です。
という型クラスを宣言しCategoryます。theは、関連する関数でcateg実装されている型を参照するために使用される変数です。Category後であなたが言うときにそれを埋めます
instance Category Foo where
....
次にcateg、型クラスのメソッドで が使用されている場所で、メソッドを置き換えFooて定義します。
「次のメソッドがある場合、型categは aです」と読み上げます。Category
メソッドについては次のとおりです。
method1 :: categ a a
method2 :: categ a b -> categ b c -> categ a c
実装する型が実装する必要がある 2 つの関数を宣言しCategoryます。a最初のものは、任意の type に対してtype を返す引数なしの関数categ a aです。method2は、 と の 2 つのデータを受け取りcateg a b、categ b cを返しますcateg a c。
ここa b cに型変数があります。これらは、関数が呼び出されたときに任意の具象型で埋められるプレースホルダーです。C++ または Java に精通している場合は、
template<typename A>
categ<A, A> method1();
Haskellにあるものにかなり近いです。Haskell では、型変数を宣言せずにそのまま使用します。それらは関数ローカルであり、 「 For any type a, the following code works 」のようなことを言っているのと同じです。
これは Haskell のかなり基本的なことです。Learn You A Haskellを読むことをお勧めします。これは無料で、投稿したばかりのコードのすべての側面をカバーします。