は、以下の例を考えてみますHaskell - typeclassを追加しますか?
data Dot = Dot Double Double
data Vector = Vector Double Double
まず、私はVector
追加のため+
演算子をオーバーロードしたいと思います。私は平等(==
)演算子をオーバーロードしたい場合、私はそれが好きで記述します。
instance Eq Vector where ...blahblahblah
しかし、ほかの操作を持つタイプのようなVector
振る舞いをするAdd
型クラスがある場合、私は見つけることができません。私はハスケルのタイプメタルの完全なリストを見つけることさえできません。私はいくつかのチュートリアルからしか知りません。そのようなリストは存在しますか?
また、オペレータにVector
〜Dot
の演算子をオーバーロードすることはできますか(これは論理的ではありませんか?)。
なぜ点とベクトルを区別する必要がありますか?他の人が触れたように、Num型のクラスには(+)がありますが、両方の引数が同じ型でなければならないので、ドットとベクトルで(+)を実装することはできません。2つの型が互換性があると考えることができる場合は、1つの型しか持たず、その型をNumのインスタンスにすることができます。 – Boris
おそらく 'Num 'を探しているかもしれませんが、' Monoid'型のクラスがあなたにとって興味深いかもしれません。他のリソースの中で、[LYAH#monoids](http://learnyouahaskell.com/functors-applicative-functors-and-monoids#monoids) –