<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Aug 11, 2017 at 11:25 AM, Baa <span dir="ltr"><<a href="mailto:aquagnu@gmail.com" target="_blank">aquagnu@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">I have code (this is the fragment only):<br>
<br>
  {-# LANGUAGE CPP                 #-}<br>
  ...<br>
  ...<br>
    let user' = ...<br>
    ...<br>
    else defect $ logger # ("authentication failure (user: " ++ user' ++ ")") #: __LINE__<br>
    ...<br>
  ...<br>
<br>
and I get compilation error:<br>
<br>
        • Found hole: __LINE__ :: Int<br>
          Or perhaps ‘__LINE__’ is mis-spelled, or not in scope<br>
</blockquote><div><br></div><div>You do understand that CPP refers to the C preprocessor, correct?</div><div><br></div><div>Or perhaps it is C syntax that you are unaware of.</div><div><br></div><div>Haskell does not get to tell a C preprocessor to follow Haskell rules instead of C rules. In the referenced chunk, there are two things that can cause problems: the single quote, which in the C preprocessor begins a string-like entity (character literal.. for historical reasons, C (char) literals can have multiple characters!), and the # which in mid-line indicates a token pasting operation of some kind.</div><div><br></div><div>And in this particular case, the #s probably just got eaten, and the ' means the following __LINE__ was in what the C preprocessor thought was a long (char) constant and therefore did not get expanded. Since it has a leading underscore in its name, and is not known to be bound *at the Haskell level*, it is interpreted as a hole.</div><div><br></div><div>If you are using LANGUAGE CPP, you must avoid Haskell syntax that is not also valid C tokens. This is the downside of using a tool intended for a different language with different syntax rules.</div></div><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>brandon s allbery kf8nh                               sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div><div>unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div></div>
</div></div>