2015-09-04 77 views
14

假設我有一個類型類n類型參數,我希望他們中的任何一個唯一確定所有其他類型。是否足以使依賴關係形成類週期所有類型參數取決於彼此的功能依賴關係

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

(線性)那裏是從每一個參數每隔一個路徑,或者我需要擴大像所有可能的路徑在

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

(二次方)?兩者之間有什麼可觀察到的差異?又有怎樣

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 ~ A。我們找到a -> b fundep並掃描實例以查找b ~ B。我們再次找到了b -> c fundep並實現了c ~ C。瞧,我們得到了(A, B, C)

相反,如果我們用a ~ ABar a b c => (a, b, c),我們會發現a -> bb ~ B,但是發現b -> c之前,我們會發現a -> c

唯一的區別是哪些fundep箭頭用於推斷類型。 a -> b, b -> ca -> b, a -> c不能產生不同的結果。