<div dir="auto"><div>I switched to cpphs which doesn't have this problem.<br><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Nov 22, 2023, 10:42 PM Viktor Dukhovni <<a href="mailto:ietf-dane@dukhovni.org">ietf-dane@dukhovni.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Tue, Nov 21, 2023 at 05:36:13PM -0800, Jeff Clites via Haskell-Cafe wrote:<br>
<br>
> I like it. I would be interesting (though perhaps overkill) to have a special operator which is like ++ but which can only be applied to list literals (not only strings), and which is guaranteed to be syntactic sugar for the concatenated list. One step fancier would be to allow it not just for literals but for any known-at-compile-time values. (So it’s syntactically an operator but in actuality more of a compiler directive, to evaluate the concatenation at compile time, or fail if that’s not possible.)<br>
<br>
Well, I guess we already have that in the form of Template Haskell<br>
splices, but that's rather a heavy hammer to swat this particular<br>
fly...<br>
<br>
    {-# LANGUAGE TemplateHaskell #-}<br>
    module Data.CompileTime(compileTimeString) where<br>
    import Language.Haskell.TH.Syntax as TH<br>
<br>
    compileTimeString :: TH.Quote m => String -> TH.Code m String<br>
    compileTimeString str = let !lit = str in [|| lit ||]<br>
<br>
Which when imported into:<br>
<br>
    {-# LANGUAGE CPP, TemplateHaskell #-}<br>
    module Main(main) where<br>
    import Data.CompileTime<br>
<br>
    hello :: String<br>
    hello = $$( compileTimeString $ "Hello" ++ " World!" )<br>
<br>
    main :: IO ()<br>
    main = print hello<br>
<br>
Produces the "Core" below:<br>
<br>
    ...<br>
    main :: IO ()<br>
    main<br>
      = print ($fShowList $fShowChar) (unpackCString# "Hello World!"#)<br>
<br>
-- <br>
    Viktor.<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
To (un)subscribe, modify options or view archives go to:<br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>
Only members subscribed via the mailman list are allowed to post.</blockquote></div></div></div>