title: Ways to pack (adjacent) elements of a list into 2-tuples
body: <p>I was wondering if there would be a concise/one-liner way to do the following:</p>
  
  <pre><code>pack :: [a] -&gt; [(a, a)]
  pack []       = []
  pack [_]      = []
  pack (x:y:xs) = (x, y) : pack xs
  </code></pre>
  
  <p>Which is the same as:</p>
  
  <pre><code>pack' xs = [(x, y) | (x, y, i) &lt;- zip3 xs (tail xs) [0..], even i]
  </code></pre>
  
  <p>I don’t have much against either of these two options, but I was wondering: is there more concise way by combining <code>(,)</code> with some other function?</p>
  
  <p>I had assumed there’d be such a way, but it eludes me. So this is just out of curiosity.</p>
  
  <p>Thanks!</p>