假设我有一个具有n个类型参数的类型类,并且我希望其中任意一个唯一地确定所有其他参数.这是否足以使依赖关系形成一个循环
class Foo a b c | a -> b,b -> c,c -> a
(线性),其中从每个参数到另一个参数的路径,或者我需要扩展所有可能的路径,如in
class Bar a b c | a -> b,a -> c,b -> a,c -> a,c -> b
(二次)?两者之间有差异吗?怎么样
class Baz a b c | a -> b c,b -> a c,c -> a b
以上所有操作均等效于:
首先,一个 – > b c在字面上与 – > b,a – > C.
接下来,假设我们得到Foo a b c => (a,b,c).说,我们意识到一个〜A.我们找到一个 – > b通过实例查找b〜B.再次找到b – > (C,C,C).
如果相反,我们有Bar a b c => (a,c)与〜A,我们会发现 – > b和b〜B,但是在找到b→ c,我们会找到一个 – > C.
唯一的区别是用于推算哪些类型的底部箭头. a – > b,b – > c和a – b,a – > c不能产生不同的结果.