Скажем, у меня есть класс типа с параметрами типа 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