module System where import NHC.FFI foreign import ccall primGetEnv :: PackedString -> IO (Ptr Char) foreign import cast ptrToString :: (Ptr Char) -> PackedString getEnv :: String -> IO String getEnv symbol = do ptr <- primGetEnv (toCString symbol) if ptr==nullPtr then do errno <- getErrNo throwIOError ("getEnv \""++symbol++"\"") Nothing Nothing errno else do return (fromCString (ptrToString ptr))