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を読むことをお勧めします。これは無料で、投稿したばかりのコードのすべての側面をカバーします。