Library proposal: Add System.Info.isWindows

Ian Lynagh igloo at
Tue Aug 7 08:04:59 EDT 2007

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"
-dllExtension = "so"

+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
    Arch = I386 | AMD64 | Sparc | ... | OtherArch String

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

> > 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.


More information about the Libraries mailing list