-#if __GLASGOW_HASKELL__ >= 602
-#define SYSTEM_IO_ERROR System.IO.Error
-#else
-#define SYSTEM_IO_ERROR System.IO
+/* Global variables may not work in other Haskell implementations,
+ * but we need them currently! so the conditional on GLASGOW won't do. */
+#ifndef __HADDOCK__
+#if defined(__GLASGOW_HASKELL__) || !defined(__GLASGOW_HASKELL__)
+#define GLOBAL_VAR(name,value,ty) \
+{-# NOINLINE name #-}; \
+name :: IORef (ty); \
+name = Util.global (value);