2015-09-04 20 views
14

n型のパラメータを持つ型クラスがあり、他のすべての型を一意に決定したいとします。それは十分な依存関係を作るためにそこに他のすべてのものにすべてのパラメータからパスがある、または私はすべての型パラメータは関数の依存関係によってお互いに依存します

class Bar a b c | a -> b, a -> c, b -> a, b -> c, c -> a, c -> b 
のようにすべての可能なパスを拡張する必要があります

class Foo a b c | a -> b, b -> c, c -> a 

(リニア)でのようなサイクルを形成しています

(2次式)?両者の間に観察可能な違いはありますか?方法について

class Baz a b c | a -> b c, b -> a c, c -> a b 
+1

私は考えていませんが、私はそれらが同等であることを本当に願っています。私はそれらがあると思います。 – chi

+2

私はまた、a - > b c、b - > a c、c - > a bという関係について知りたいです... –

+0

@AndrásKovács良い点、私は質問に加えました。 –

答えて

1

操作上、上記のすべてが等価であり、すべての

まず、a -> b cは文字通りa -> b, a -> cと同じものです。

次に、Foo a b c => (a, b, c)が得られたとします。言って、を認識します。私たちはa -> b fundepを見つけ、インスタンスをスキャンしてb ~ Bを見つけます。再びb -> cが見つかり、c ~ Cを実現しました。私たちは(A, B, C)を持っています。

代わりに、我々はa ~ ABar a b c => (a, b, c)を持っていた場合、我々は、しかしb -> cを見つける前に、私たちはa -> cを発見しただろう、a -> bを見つけ、b ~ Bたでしょう。

唯一の違いは、タイプを推測するために矢印を使用することです。 a -> b, b -> cおよびa -> b, a -> cは異なる結果を生成することはできません。

関連する問題