title: What does a comma in the guard syntax do?
body: <p>In a code base I'm reading, I found a function declaration like this (some parts are missing):</p>
  
  <pre><code>filepathNormalise :: BS.ByteString -&gt; BS.ByteString
  filepathNormalise xs
      | isWindows, Just (a,xs) &lt;- BS.uncons xs, sep a, Just (b,_) &lt;- BS.uncons xs, sep b
      = '/' `BS.cons` f xs
  </code></pre>
  
  <p>What does the comma do here?</p>
  
  <p>(Only as a bonus, if someone readily knows this: is this syntax mentioned in <em>Haskell Programming from first principles</em>, and if so, where? As I can't remember reading about it.)</p>