{-# LANGUAGE CPP #-} {-# LANGUAGE Safe #-} ----------------------------------------------------------------------------- -- | -- Module : System.Info -- Copyright : (c) The University of Glasgow 2001 -- License : BSD-style (see the file libraries/base/LICENSE) -- -- Maintainer : libraries@haskell.org -- Stability : stable -- Portability : portable -- -- Information about the characteristics of the host -- system lucky enough to run your program. -- -- For a comprehensive listing of supported platforms, please refer to -- https://gitlab.haskell.org/ghc/ghc/-/wikis/platforms ----------------------------------------------------------------------------- module System.Info ( os , arch , compilerName , compilerVersion , fullCompilerVersion ) where import Data.Version (Version (..)) -- | The version of 'compilerName' with which the program was compiled -- or is being interpreted. -- -- ==== __Example__ -- > ghci> compilerVersion -- > Version {versionBranch = [8,8], versionTags = []} compilerVersion :: Version compilerVersion :: Version compilerVersion = [Int] -> [String] -> Version Version [Int major, Int minor] [] where (Int major, Int minor) = Int compilerVersionRaw Int -> Int -> (Int, Int) forall a. Integral a => a -> a -> (a, a) `divMod` Int 100 -- | The full version of 'compilerName' with which the program was compiled -- or is being interpreted. It includes the major, minor, revision and an additional -- identifier, generally in the form "<year><month><day>". fullCompilerVersion :: Version fullCompilerVersion :: Version fullCompilerVersion = [Int] -> [String] -> Version Version [Int] version [] where version :: [Int] version :: [Int] version = (String -> Int) -> [String] -> [Int] forall a b. (a -> b) -> [a] -> [b] forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap String -> Int forall a. Read a => String -> a read ([String] -> [Int]) -> [String] -> [Int] forall a b. (a -> b) -> a -> b $ String -> [String] splitVersion __GLASGOW_HASKELL_FULL_VERSION__ splitVersion :: String -> [String] splitVersion :: String -> [String] splitVersion String s = case (Char -> Bool) -> String -> String forall a. (a -> Bool) -> [a] -> [a] dropWhile (Char -> Char -> Bool forall a. Eq a => a -> a -> Bool == Char '.') String s of String "" -> [] String s' -> let (String w, String s'') = (Char -> Bool) -> String -> (String, String) forall a. (a -> Bool) -> [a] -> ([a], [a]) break (Char -> Char -> Bool forall a. Eq a => a -> a -> Bool == Char '.') String s' in String w String -> [String] -> [String] forall a. a -> [a] -> [a] : String -> [String] splitVersion String s'' #include "ghcplatform.h" -- | The operating system on which the program is running. -- Common values include: -- -- * "darwin" — macOS -- * "freebsd" -- * "linux" -- * "linux-android" -- * "mingw32" — Windows -- * "netbsd" -- * "openbsd" os :: String os :: String os = String HOST_OS -- | The machine architecture on which the program is running. -- Common values include: -- -- * "aarch64" -- * "alpha" -- * "arm" -- * "hppa" -- * "hppa1_1" -- * "i386" -- * "ia64" -- * "m68k" -- * "mips" -- * "mipseb" -- * "mipsel" -- * "nios2" -- * "powerpc" -- * "powerpc64" -- * "powerpc64le" -- * "riscv32" -- * "riscv64" -- * "loongarch32" -- * "loongarch64" -- * "rs6000" -- * "s390" -- * "s390x" -- * "sh4" -- * "sparc" -- * "sparc64" -- * "vax" -- * "x86_64" arch :: String arch :: String arch = String HOST_ARCH -- | The Haskell implementation with which the program was compiled -- or is being interpreted. -- On the GHC platform, the value is "ghc". compilerName :: String compilerName :: String compilerName = String "ghc" compilerVersionRaw :: Int compilerVersionRaw :: Int compilerVersionRaw = __GLASGOW_HASKELL__