title: All type parameters depending on each other in functional dependencies
body: <p>Let's say I have a type class with <em>n</em> type parameters and I want any of them to uniquely determine all the other ones. Is it enough to make the dependencies form a cycle like in</p>
  
  <pre><code>class Foo a b c | a -&gt; b, b -&gt; c, c -&gt; a
  </code></pre>
  
  <p>(linear) where there is a path from every parameter to every other one, or do I need to expand all possible paths like in</p>
  
  <pre><code>class Bar a b c | a -&gt; b, a -&gt; c, b -&gt; a, b -&gt; c, c -&gt; a, c -&gt; b
  </code></pre>
  
  <p>(quadratic)? Is there any observable difference between the two? And how about</p>
  
  <pre><code>class Baz a b c | a -&gt; b c, b -&gt; a c, c -&gt; a b
  </code></pre>