<div dir="ltr"><br><div class="gmail_extra"><br><div class="gmail_quote">On Mon, Nov 2, 2015 at 5:57 AM, Simon Peyton Jones <span dir="ltr"><<a href="mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">





<div lang="EN-GB" link="blue" vlink="purple">
<div>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d">Aha.  It would be great to say all that in the source code!!  It’s very non-obvious that you not want people ever to construct a CGId on Windows.  After
 all, it has a newtype definition!<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"><u></u> </span></p></div></div></blockquote><div><br></div><div>Good call, I'll update with some comments (though see refactoring comments below).</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-GB" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d">Could you declare it differently?<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d">    data CGId   -- No constructors<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"><u></u></span></p></div></div></blockquote><div><br></div><div>Certainly we could. Then the question would be "why does the Windows code look so different?" There are lots of colors to this bikeshed, and I don't have any particular affinity to any of them. If you'd prefer it looked that way, I can make that change. I initially erred with making the code as similar to the POSIX code as possible.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-GB" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d">Also if so, why does the Windows-specific foreign import of c_runInteractiveProcess (lin 440-is) pas a Ptr CGId? You’d just told me that we can never
 create one.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"><u></u></span></p></div></div></blockquote><div><br></div><div><br></div><div>The Windows-specific foreign import is on line ~533, and does not include those arguments.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-GB" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d">Also,
<u></u><u></u></span></p>
<p><u></u><span style="font-family:Symbol;color:#1f497d"><span>·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><u></u><span style="font-family:"Calibri",sans-serif;color:#1f497d">It’d help to comment the #else on line 456 as being “else if not windows”<u></u><u></u></span></p>
<p><u></u><span style="font-family:Symbol;color:#1f497d"><span>·<span style="font:7.0pt "Times New Roman"">        
</span></span></span><u></u><span style="font-family:"Calibri",sans-serif;color:#1f497d">The #endifs on line 546 or thereabouts are mis-labelled.  at the moment the second says “GLASGOW_HASKELL” but actually it’s the first<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"><u></u></span></p></div></div></blockquote><div><br></div><div><br></div><div>Agreed that the code is fairly difficult to follow with the nested ifdefs. However, instead of trying to salvage that, it's probably worth a refactoring to put the Windows and POSIX code into separate modules and then just import those conditionally.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-GB" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d">I have no opinion about the best solution; I’d just like it to compile and preferably warning free since that is our default policy.  Or add a –Wwarn
 at the top.<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"><u></u></span></p></div></div></blockquote><div><br></div><div>If you're looking for a short-term solution, I can add -Wwarn to the top until some kind of refactoring takes place.</div><div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div lang="EN-GB" link="blue" vlink="purple"><div><p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d">thanks<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d">Simon<u></u><u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"><u></u> <u></u></span></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif"> <a href="mailto:michael.snoyman@gmail.com" target="_blank">michael.snoyman@gmail.com</a> [mailto:<a href="mailto:michael.snoyman@gmail.com" target="_blank">michael.snoyman@gmail.com</a>]
<b>On Behalf Of </b>Michael Snoyman<br>
<b>Sent:</b> 02 November 2015 13:42</span></p><div><div class="h5"><br>
<b>To:</b> Simon Peyton Jones<br>
<b>Cc:</b> <a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<b>Subject:</b> Re: process library broken on Windows<u></u><u></u></div></div><p></p>
</div>
</div><div><div class="h5">
<p class="MsoNormal"><u></u> <u></u></p>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
That's the goal; it's a feature that does not work on Windows, only on non-Windows systems (setuid/setgid for a child process). For POSIX systems, CGid is exported from base, and can be used. On Windows, the data type is present to give the same signature,
 but the constructor itself is not exported to prevent using the feature. An argument could be made for other approaches:<u></u><u></u></p>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
1. Expose the constructor, allowing users to set a value, and that value will be ignored<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
2. Make the fields themselves conditional on the OS being used<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<u></u> <u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
I don't think there's a strong argument in any direction for this.<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
<u></u> <u></u></p>
<div>
<p class="MsoNormal" style="margin-right:0cm;margin-bottom:6.0pt;margin-left:0cm">
On Mon, Nov 2, 2015 at 5:37 AM, Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-right:0cm">
<div>
<div>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d">I’m puzzled.   Internals.hs defines a newtype</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal" style="text-indent:36.0pt">
<span style="font-family:"Calibri",sans-serif;color:#1f497d">newtype CGid = CGid Word32</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d">A value of this type is needed to fill in the child_group field of CreateProcess.  If you don’t export it, you could
 never initialise this field to anything other than Nothing, so why do you have it?</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d">Looks to me as if the warning has nailed a real bug</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d">Simon</span><u></u><u></u></p>
<p class="MsoNormal"><span style="font-family:"Calibri",sans-serif;color:#1f497d"> </span><u></u><u></u></p>
<div style="border:none;border-left:solid blue 1.5pt;padding:0cm 0cm 0cm 4.0pt">
<div>
<div style="border:none;border-top:solid #e1e1e1 1.0pt;padding:3.0pt 0cm 0cm 0cm">
<p class="MsoNormal"><b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif">From:</span></b><span lang="EN-US" style="font-size:11.0pt;font-family:"Calibri",sans-serif">
<a href="mailto:michael.snoyman@gmail.com" target="_blank">michael.snoyman@gmail.com</a> [mailto:<a href="mailto:michael.snoyman@gmail.com" target="_blank">michael.snoyman@gmail.com</a>]
<b>On Behalf Of </b>Michael Snoyman<br>
<b>Sent:</b> 02 November 2015 13:34<br>
<b>To:</b> Simon Peyton Jones<br>
<b>Cc:</b> <a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<b>Subject:</b> Re: process library broken on Windows</span><u></u><u></u></p>
</div>
</div>
<div>
<div>
<p class="MsoNormal"> <u></u><u></u></p>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">I didn't read closely enough: I see now that it's a warning, not an error. I initially didn't export that constructor since it's only present on Windows for API compatibility, but will
 never be used. Since this is just the internals module, I can export it, but my preference would in fact be to leave it as-is with the warning. Two alternatives:<u></u><u></u></p>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt"> <u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">1. Create a new hidden module that creates and exports the type constructor, just to hide the warning. I'm -1 on that, since that's extra compile time everyone has to endure just for warning
 avoidance.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">2. base could export CGid for Windows (currently, it does not).<u></u><u></u></p>
</div>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt"> <u></u><u></u></p>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">On Mon, Nov 2, 2015 at 5:17 AM, Michael Snoyman <<a href="mailto:michael@snoyman.com" target="_blank">michael@snoyman.com</a>> wrote:<u></u><u></u></p>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">I'll look into this. I just made a new release of process, and was certain I tested on Windows, but perhaps something changed between that commit and release.<u></u><u></u></p>
</div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt"> <u></u><u></u></p>
<div>
<div>
<div>
<p class="MsoNormal" style="margin-bottom:6.0pt">On Mon, Nov 2, 2015 at 5:15 AM, Simon Peyton Jones <<a href="mailto:simonpj@microsoft.com" target="_blank">simonpj@microsoft.com</a>> wrote:<u></u><u></u></p>
</div>
</div>
<blockquote style="border:none;border-left:solid #cccccc 1.0pt;padding:0cm 0cm 0cm 6.0pt;margin-left:4.8pt;margin-top:5.0pt;margin-right:0cm;margin-bottom:5.0pt">
<div>
<div>
<div>
<div>
<p class="MsoNormal">I’m getting this on HEAD in te ‘<u></u><u></u></p>
<p>libraries\process\System\Process\Internals.hs:106:16: warning:<u></u><u></u></p>
<p>    Defined but not used: data constructor ‘CGid’<u></u><u></u></p>
<p class="MsoNormal">Indeed it looks as if CGId(..) should be exported, else createProcess is unusuable.  This looks like the right change.  Would someone like to check and make the change<u></u><u></u></p>
<p class="MsoNormal">Simon<u></u><u></u></p>
<p>diff --git a/System/Process/Internals.hs b/System/Process/Internals.hs<u></u><u></u></p>
<p>index 5575ac4..3e23ad5 100644<u></u><u></u></p>
<p>--- a/System/Process/Internals.hs<u></u><u></u></p>
<p>+++ b/System/Process/Internals.hs<u></u><u></u></p>
<p>@@ -37,6 +37,8 @@ module System.Process.Internals (<u></u><u></u></p>
<p>#if !defined(mingw32_HOST_OS) && !defined(__MINGW32__)<u></u><u></u></p>
<p>     pPrPr_disableITimers, c_execvpe,<u></u><u></u></p>
<p>     ignoreSignal, defaultSignal,<u></u><u></u></p>
<p>+#else<u></u><u></u></p>
<p>+    CGid(..), GroupID, UserID,<u></u><u></u></p>
<p>#endif<u></u><u></u></p>
<p>     withFilePathException, withCEnvironment,<u></u><u></u></p>
<p>     translate,<u></u><u></u></p>
</div>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
<p class="MsoNormal" style="margin-bottom:12.0pt">_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<a href="https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail.haskell.org%2fcgi-bin%2fmailman%2flistinfo%2fghc-devs&data=01%7c01%7csimonpj%40064d.mgd.microsoft.com%7cdd25a0d693de489171bb08d2e38a505d%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=YdqpMC5wr2K6oUOw9WImRGpSl6EsV8zQyAK%2ba26oF9M%3d" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><u></u><u></u></p>
</blockquote>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</blockquote>
</div>
<p class="MsoNormal"> <u></u><u></u></p>
</div>
</div>
</div>
</div>
</div>
</div>
</blockquote>
</div>
<p class="MsoNormal"><u></u> <u></u></p>
</div>
</div></div></div>
</div>
</div>

</blockquote></div><br></div></div>