
On Mon, Aug 06, 2007 at 01:36:54PM +0100, Neil Mitchell wrote:
Proposal:
Add System.Info.isWindows :: Bool
I was actually planning to propose something along similar lines this week, in order to replace ifdef's like in the GHC and library sources with pattern matches like I have done in Cabal, e.g.: -#if mingw32_HOST_OS || mingw32_TARGET_OS -dllExtension = "dll" -#else -dllExtension = "so" -#endif +dllExtension = case os of + Windows _ -> "dll" + _ -> "so" I haven't been through to look at what ifdef-replacements are needed, but I expect to want both OS = Linux | Windows Windows | ... | OtherOS String and Arch = I386 | AMD64 | Sparc | ... | OtherArch String types. Not all ifdefs will be able to be removed, e.g. because they use platform-specific packages or foreign imports. I don't know if it would be worth having other extensions to make elmiinating these ifdefs possible too. I would like it to be easy for an optimiser to dead-code-eliminate branches that don't apply (and in particular I would like it to be something that is DCEd by GHC so we don't carry around entire NCGs we can't use, for example). As long as that happens I don't really mind if it is done by pattern matching or by using isWindows-style functions. Doing equality tests against System.Info.os doesn't cut it, though. Finally, it needs to remain in base if we are to use it for ifdef-removal in the base libraries (and as low down in base as possible).
data OS = Linux | Windows Windows | ... etc | Other String data Windows = MingW
Since when did GNU build Windows operating systems?
It seemed to me that at some point we would be likely to want to distinguish between MingW | Cygwin | Native, but a lot of the time we'd want to just match Windows _.
You can add System.Info.libraries :: [Libary], and make MingW a library, but if you have a Windows enumeration it really should be for a list of Windows operating systems.
We'd need to do IO to do that, so it wouldn't fit my needs. Also, MingW `elem` libraries wouldn't get optimised out at compile time. It would be great if we could get all this into 6.8, as then we will be able to rely on it a year or so earlier.
There are lots of things that could go in System.Info, and I agree more should be moved along.
Ditto for these. Thanks Ian