-- Stability : experimental
-- Portability : portable
--
--- Misc information about the characteristics of the host
--- architecture\/machine lucky enough to run your program.
+-- Information about the characteristics of the host
+-- system lucky enough to run your program.
--
-----------------------------------------------------------------------------
-#include "MachDeps.h"
-
module System.Info
(
os, -- :: String
- arch -- :: String
+ arch, -- :: String
+ compilerName, -- :: String
+ compilerVersion -- :: Version
) where
import Prelude
+import Data.Version
+
+-- | The version of 'compilerName' with which the program was compiled
+-- or is being interpreted.
+compilerVersion :: Version
+compilerVersion = Version {versionBranch=[major, minor], versionTags=[]}
+ where (major, minor) = compilerVersionRaw `divMod` 100
+
+-- | The operating system on which the program is running.
+os :: String
+-- | The machine architecture on which the program is running.
arch :: String
+
+-- | The Haskell implementation with which the program was compiled
+-- or is being interpreted.
+compilerName :: String
+
+compilerVersionRaw :: Int
+
+#if defined(__NHC__)
+#include "OSInfo.hs"
+compilerName = "nhc98"
+compilerVersionRaw = __NHC__
+
+#elif defined(__GLASGOW_HASKELL__)
+#include "ghcplatform.h"
+os = HOST_OS
arch = HOST_ARCH
+compilerName = "ghc"
+compilerVersionRaw = __GLASGOW_HASKELL__
-os :: String
+#elif defined(__HUGS__)
+#include "platform.h"
os = HOST_OS
+arch = HOST_ARCH
+compilerName = "hugs"
+compilerVersionRaw = 0 -- ToDo
+
+#else
+#error Unknown compiler name
+#endif