title: always return true from guard
body: <p>I'm trying to figure out a solution for <a href="http://www.haskell.org/haskellwiki/99_questions/21_to_28" rel="nofollow">Problem 27</a> of 99 Haskell questions.<br>
  Here's how I want it to be:  </p>
  
  <pre><code>  group :: (Eq a) =&gt; [Int] -&gt; [[a]] -&gt; [[[[a]]]]
    group []     _  = []
    group (i:is) xs 
      | sum (i:is) /= length xs = error "invalid arguments"
      | otherwise               = ...
  </code></pre>
  
  <p>An example from the link:</p>
  
  <blockquote>
    <p>group [2,2,5] ["aldo","beat","carla","david","evi","flip","gary","hugo","ida"]<br>
        [[["aldo","beat"],["carla","david"],["evi","flip","gary","hugo","ida"]],...]
         (altogether 756 solutions)</p>
  </blockquote>
  
  <p>Thus, I want to firstly check whether the sum of Int list equals to the length String list as above. What I run into is that no matter whether the two values equal or not it always print "invalid arguments". I also tried this:</p>
  
  <pre><code>group (i:is) xs 
       | (sum (i:is) == length xs) = ...
       | otherwise                 = error "invalid arguments"
  </code></pre>
  
  <p>still doesn't work<br>
   Any ideas?</p>
  
  <p><strong>UPDATES</strong>: thanks guys, my carelessness. Here's the recursive part of the function:</p>
  
  <pre><code> group (i:is) xs 
       | (sum (i:is) == length xs) = filter (/= []) $ concatGroups (combinations i xs) (group is xs)
       | otherwise                 = error ("invalid arguments: " ++ show (sum(i:is)) ++ "/=" ++ show(length xs))
  </code></pre>
  
  <p>As you can tell, <code>group is xs</code> reduces the sum but not the length so it will always complain when going recursive. I think I will just remove that guard and wish the user would never do it wrong.</p>