diff --git a/Array.hs b/Array.hs
--- a/Array.hs
+++ b/Array.hs
@@ -1,10 +1,11 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Trustworthy #-}
 #endif
 
 module Array (
         module Ix,  -- export all of Ix for convenience
-        Array, array, listArray, (!), bounds, indices, elems, assocs, 
+        Array, array, listArray, (!), bounds, indices, elems, assocs,
         accumArray, (//), accum, ixmap
     ) where
 
diff --git a/Bits.hs b/Bits.hs
--- a/Bits.hs
+++ b/Bits.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/CError.hs b/CError.hs
--- a/CError.hs
+++ b/CError.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/CForeign.hs b/CForeign.hs
--- a/CForeign.hs
+++ b/CForeign.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/CPUTime.hs b/CPUTime.hs
--- a/CPUTime.hs
+++ b/CPUTime.hs
@@ -1,8 +1,9 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
 
 module CPUTime (
-        getCPUTime, cpuTimePrecision 
+        getCPUTime, cpuTimePrecision
     ) where
 import System.CPUTime
diff --git a/CString.hs b/CString.hs
--- a/CString.hs
+++ b/CString.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/CTypes.hs b/CTypes.hs
--- a/CTypes.hs
+++ b/CTypes.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/Char.hs b/Char.hs
--- a/Char.hs
+++ b/Char.hs
@@ -1,10 +1,11 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
 
 module Char (
-        isAscii, isLatin1, isControl, isPrint, isSpace, isUpper, isLower, 
-        isAlpha, isDigit, isOctDigit, isHexDigit, isAlphaNum, 
+        isAscii, isLatin1, isControl, isPrint, isSpace, isUpper, isLower,
+        isAlpha, isDigit, isOctDigit, isHexDigit, isAlphaNum,
         digitToInt, intToDigit,
         toUpper, toLower,
         ord, chr,
diff --git a/Complex.hs b/Complex.hs
--- a/Complex.hs
+++ b/Complex.hs
@@ -1,10 +1,11 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
 
 module Complex (
-        Complex((:+)), realPart, imagPart, conjugate, 
-        mkPolar, cis, polar, magnitude, phase 
+        Complex((:+)), realPart, imagPart, conjugate,
+        mkPolar, cis, polar, magnitude, phase
     ) where
 
 import Data.Complex
diff --git a/Directory.hs b/Directory.hs
--- a/Directory.hs
+++ b/Directory.hs
@@ -1,15 +1,16 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Trustworthy #-}
 #endif
 
 module Directory (
-        Permissions( Permissions, readable, writable, executable, searchable ), 
-        createDirectory, removeDirectory, removeFile, 
+        Permissions( Permissions, readable, writable, executable, searchable ),
+        createDirectory, removeDirectory, removeFile,
         renameDirectory, renameFile, getDirectoryContents,
         getCurrentDirectory, setCurrentDirectory,
         doesFileExist, doesDirectoryExist,
         getPermissions, setPermissions,
-        getModificationTime 
+        getModificationTime
     ) where
 
 import System.Directory hiding (Permissions,
diff --git a/ForeignPtr.hs b/ForeignPtr.hs
--- a/ForeignPtr.hs
+++ b/ForeignPtr.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Trustworthy #-}
 #endif
diff --git a/IO.hs b/IO.hs
--- a/IO.hs
+++ b/IO.hs
@@ -1,4 +1,4 @@
-{-# OPTIONS_GHC -fno-warn-deprecations #-}
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
@@ -8,16 +8,16 @@
         IOMode(ReadMode,WriteMode,AppendMode,ReadWriteMode),
         BufferMode(NoBuffering,LineBuffering,BlockBuffering),
         SeekMode(AbsoluteSeek,RelativeSeek,SeekFromEnd),
-        stdin, stdout, stderr, 
+        stdin, stdout, stderr,
         openFile, hClose, hFileSize, hIsEOF, isEOF,
-        hSetBuffering, hGetBuffering, hFlush, 
-        hGetPosn, hSetPosn, hSeek, 
-        hWaitForInput, hReady, hGetChar, hGetLine, hLookAhead, hGetContents, 
+        hSetBuffering, hGetBuffering, hFlush,
+        hGetPosn, hSetPosn, hSeek,
+        hWaitForInput, hReady, hGetChar, hGetLine, hLookAhead, hGetContents,
         hPutChar, hPutStr, hPutStrLn, hPrint,
         hIsOpen, hIsClosed, hIsReadable, hIsWritable, hIsSeekable,
-        isAlreadyExistsError, isDoesNotExistError, isAlreadyInUseError, 
+        isAlreadyExistsError, isDoesNotExistError, isAlreadyInUseError,
         isFullError, isEOFError,
-        isIllegalOperation, isPermissionError, isUserError, 
+        isIllegalOperation, isPermissionError, isUserError,
         ioeGetErrorString, ioeGetHandle, ioeGetFileName,
         try, bracket, bracket_,
 
diff --git a/Int.hs b/Int.hs
--- a/Int.hs
+++ b/Int.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/Ix.hs b/Ix.hs
--- a/Ix.hs
+++ b/Ix.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/List.hs b/List.hs
--- a/List.hs
+++ b/List.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
@@ -26,7 +27,7 @@
         take, drop, splitAt, takeWhile, dropWhile, span, break,
         lines, words, unlines, unwords, reverse, and, or,
         any, all, elem, notElem, lookup,
-        sum, product, maximum, minimum, concatMap, 
+        sum, product, maximum, minimum, concatMap,
         zip, zip3, zipWith, zipWith3, unzip, unzip3
     ) where
 
diff --git a/Locale.hs b/Locale.hs
--- a/Locale.hs
+++ b/Locale.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Trustworthy #-}
 #endif
@@ -6,9 +7,9 @@
         TimeLocale(..), defaultTimeLocale
     ) where
 
-import System.Locale ( 
-	-- just the bits that are specified by Haskell 98
-	TimeLocale(TimeLocale,wDays,months,amPm,dateTimeFmt,
-		   dateFmt,timeFmt,time12Fmt),
+import System.Locale (
+        -- just the bits that are specified by Haskell 98
+        TimeLocale(TimeLocale,wDays,months,amPm,dateTimeFmt,
+                   dateFmt,timeFmt,time12Fmt),
         defaultTimeLocale
     )
diff --git a/MarshalAlloc.hs b/MarshalAlloc.hs
--- a/MarshalAlloc.hs
+++ b/MarshalAlloc.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/MarshalArray.hs b/MarshalArray.hs
--- a/MarshalArray.hs
+++ b/MarshalArray.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/MarshalError.hs b/MarshalError.hs
--- a/MarshalError.hs
+++ b/MarshalError.hs
@@ -1,20 +1,21 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
 
 module MarshalError (
-  	module Foreign.Marshal.Error,
-	IOErrorType,
-	mkIOError,
-	alreadyExistsErrorType,
-	doesNotExistErrorType,
-	alreadyInUseErrorType,
-	fullErrorType,
-	eofErrorType,
-	illegalOperationErrorType,
-	permissionErrorType,
-	userErrorType,
-	annotateIOError
+        module Foreign.Marshal.Error,
+        IOErrorType,
+        mkIOError,
+        alreadyExistsErrorType,
+        doesNotExistErrorType,
+        alreadyInUseErrorType,
+        fullErrorType,
+        eofErrorType,
+        illegalOperationErrorType,
+        permissionErrorType,
+        userErrorType,
+        annotateIOError
   ) where
 
 import System.IO.Error
diff --git a/MarshalUtils.hs b/MarshalUtils.hs
--- a/MarshalUtils.hs
+++ b/MarshalUtils.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/Maybe.hs b/Maybe.hs
--- a/Maybe.hs
+++ b/Maybe.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/Monad.hs b/Monad.hs
--- a/Monad.hs
+++ b/Monad.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
@@ -6,13 +7,13 @@
         MonadPlus(mzero, mplus),
         join, guard, when, unless, ap,
         msum,
-        filterM, mapAndUnzipM, zipWithM, zipWithM_, foldM, 
+        filterM, mapAndUnzipM, zipWithM, zipWithM_, foldM,
         liftM, liftM2, liftM3, liftM4, liftM5,
 
         -- ...and what the Prelude exports
         Monad((>>=), (>>), return, fail),
         Functor(fmap),
-        mapM, mapM_, sequence, sequence_, (=<<), 
+        mapM, mapM_, sequence, sequence_, (=<<),
     ) where
 
 import Control.Monad
diff --git a/Numeric.hs b/Numeric.hs
--- a/Numeric.hs
+++ b/Numeric.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE PackageImports #-}
+{-# LANGUAGE CPP, PackageImports #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/Prelude.hs b/Prelude.hs
--- a/Prelude.hs
+++ b/Prelude.hs
@@ -1,4 +1,4 @@
-{-# LANGUAGE NoImplicitPrelude, BangPatterns, PackageImports #-}
+{-# LANGUAGE BangPatterns, CPP, NoImplicitPrelude, PackageImports #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Trustworthy #-}
 #endif
@@ -28,13 +28,6 @@
         -- *** Tuples
         fst, snd, curry, uncurry,
 
-#if defined(__NHC__)
-        []((:), []),        -- Not legal Haskell 98;
-                            -- ... available through built-in syntax
-        module Data.Tuple,  -- Includes tuple types
-        ()(..),             -- Not legal Haskell 98
-        (->),               -- ... available through built-in syntax
-#endif
 #ifdef __HUGS__
         (:),                -- Not legal Haskell 98
 #endif
@@ -158,7 +151,6 @@
 import qualified GHC.Real ( gcd )
 import GHC.Float
 import GHC.Show
-import GHC.Err   ( undefined )
 #endif
 
 #ifdef __HUGS__
diff --git a/Ptr.hs b/Ptr.hs
--- a/Ptr.hs
+++ b/Ptr.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/Random.hs b/Random.hs
--- a/Random.hs
+++ b/Random.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Trustworthy #-}
 #endif
@@ -37,15 +38,9 @@
 
 import Data.Int
 
-#ifdef __NHC__
-import CPUTime          ( getCPUTime )
-import Foreign.Ptr      ( Ptr, nullPtr )
-import Foreign.C        ( CTime, CUInt )
-#else
 import System.CPUTime   ( getCPUTime )
 import Data.Time        ( getCurrentTime, UTCTime(..) )
 import Data.Ratio       ( numerator, denominator )
-#endif
 import Data.Char        ( isSpace, chr, ord )
 import System.IO.Unsafe ( unsafePerformIO )
 import Data.IORef
@@ -54,17 +49,11 @@
 -- The standard nhc98 implementation of Time.ClockTime does not match
 -- the extended one expected in this module, so we lash-up a quick
 -- replacement here.
-#ifdef __NHC__
-foreign import ccall "time.h time" readtime :: Ptr CTime -> IO CTime
 getTime :: IO (Integer, Integer)
-getTime = do CTime t <- readtime nullPtr;  return (toInteger t, 0)
-#else
-getTime :: IO (Integer, Integer)
 getTime = do
   utc <- getCurrentTime
   let daytime = toRational $ utctDayTime utc
   return $ quotRem (numerator daytime) (denominator daytime)
-#endif
 
 -- | The class 'RandomGen' provides a common interface to random number
 -- generators.
diff --git a/Ratio.hs b/Ratio.hs
--- a/Ratio.hs
+++ b/Ratio.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/StablePtr.hs b/StablePtr.hs
--- a/StablePtr.hs
+++ b/StablePtr.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/Storable.hs b/Storable.hs
--- a/Storable.hs
+++ b/Storable.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/System.hs b/System.hs
--- a/System.hs
+++ b/System.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Trustworthy #-}
 #endif
@@ -9,4 +10,4 @@
 
 import System.Exit
 import System.Environment
-import System.Cmd
+import System.Process
diff --git a/Time.hs b/Time.hs
--- a/Time.hs
+++ b/Time.hs
@@ -1,9 +1,10 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Trustworthy #-}
 #endif
 
 module Time (
-        ClockTime, 
+        ClockTime,
         Month(January,February,March,April,May,June,
               July,August,September,October,November,December),
         Day(Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday),
@@ -13,7 +14,7 @@
                  tdMin, tdSec, tdPicosec),
         getClockTime, addToClockTime, diffClockTimes,
         toCalendarTime, toUTCTime, toClockTime,
-        calendarTimeToString, formatCalendarTime 
+        calendarTimeToString, formatCalendarTime
     ) where
 
 import System.Time
diff --git a/Word.hs b/Word.hs
--- a/Word.hs
+++ b/Word.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 #if __GLASGOW_HASKELL__ >= 701
 {-# LANGUAGE Safe #-}
 #endif
diff --git a/changelog.md b/changelog.md
new file mode 100644
--- /dev/null
+++ b/changelog.md
@@ -0,0 +1,11 @@
+# Changelog for [`haskell98` package](http://hackage.haskell.org/package/haskell98)
+
+## 2.0.0.3 *Mar 2014*
+
+  - Bundled with GHC 7.8.1
+
+  - Remove NHC98-specific code
+
+  - Adapt to changes in GHC 7.8's core-libaries
+
+  - Update to Cabal format 1.10
diff --git a/haskell98.cabal b/haskell98.cabal
--- a/haskell98.cabal
+++ b/haskell98.cabal
@@ -1,42 +1,94 @@
-name:		haskell98
-version:	2.0.0.2
-license:	BSD3
-license-file:	LICENSE
-maintainer:	libraries@haskell.org
-bug-reports: http://hackage.haskell.org/trac/ghc/newticket?component=libraries/haskell98
-synopsis:	Compatibility with Haskell 98
-category:   Haskell98
-description:
-	This package provides compatibility with the modules of Haskell
-	98 and the FFI addendum, by means of wrappers around modules from
-	the base package (which in many cases have additional features).
-	However Prelude, Numeric and Foreign are provided directly by
-	the base package.
-homepage:	http://www.haskell.org/definition/
+name:           haskell98
+version:        2.0.0.3
+-- GHC 7.6.1 released with 2.0.0.2
+license:        BSD3
+license-file:   LICENSE
+maintainer:     libraries@haskell.org
+bug-reports:    http://ghc.haskell.org/trac/ghc/newticket?component=libraries/haskell98
+synopsis:       Compatibility with Haskell 98
+category:       Haskell98, Prelude
+homepage:       http://www.haskell.org/definition/
 build-type:     Simple
-Cabal-Version: >= 1.6
+cabal-version:  >=1.10
+description:
+    This package provides compatibility with the modules of Haskell
+    98 and the FFI addendum, by means of wrappers around modules from
+    the base package (which in many cases have additional features).
+    However "Prelude", "Numeric" and "Foreign" are provided directly by
+    the @base@ package.
 
+extra-source-files:
+    changelog.md
+
+source-repository head
+    type:     git
+    location: http://git.haskell.org/packages/haskell98.git
+
+source-repository this
+    type:     git
+    location: http://git.haskell.org/packages/haskell98.git
+    tag:      haskell98-2.0.0.3-release
+
 Library
-    build-depends:	base        >= 3   && < 5,
-                    directory   >= 1.1 && < 1.3,
-                    old-time    >= 1.0 && < 1.2,
-                    old-locale  >= 1.0 && < 1.1,
-                    process     >= 1.0 && < 1.2,
-                    array       >= 0.3 && < 0.5,
-                    time        >= 1.2 && < 1.5
+    default-language: Haskell98
+    other-extensions:
+        BangPatterns
+        CPP
+        NoImplicitPrelude
+        PackageImports
+    if impl(ghc)
+        other-extensions:
+            Safe
+            Trustworthy
+
+    build-depends:
+        array       >= 0.5 && < 0.6,
+        base        >= 4.7 && < 4.8,
+        directory   >= 1.2 && < 1.3,
+        old-locale  >= 1.0 && < 1.1,
+        old-time    >= 1.1 && < 1.2,
+        process     >= 1.2 && < 1.3,
+        time        >= 1.4 && < 1.5
+
+    -- haskell98 is a "hidden" package
+    exposed: False
+
     exposed-modules:
         -- Haskell 98
-        Prelude, Array, CPUTime, Char, Complex, Directory, IO,
-        Ix, List, Locale,
-        Maybe, Monad, Numeric, Random, Ratio, System, Time,
-        -- FFI addendum (Foreign is in the base package)
-        Bits, CError, CForeign, CString, CTypes, ForeignPtr, Int,
-        MarshalAlloc, MarshalArray, MarshalError, MarshalUtils, Ptr,
-        StablePtr, Storable, Word
-    exposed: False
-    extensions: CPP
+        Prelude
 
-source-repository head
-    type:     git
-    location: http://darcs.haskell.org/packages/haskell98.git/
+        Array
+        CPUTime
+        Char
+        Complex
+        Directory
+        IO
+        Ix
+        List
+        Locale
+        Maybe
+        Monad
+        Numeric
+        Random
+        Ratio
+        System
+        Time
 
+        -- FFI addendum (Foreign is in the base package)
+        Bits
+        CError
+        CForeign
+        CString
+        CTypes
+        ForeignPtr
+        Int
+        MarshalAlloc
+        MarshalArray
+        MarshalError
+        MarshalUtils
+        Ptr
+        StablePtr
+        Storable
+        Word
+
+    ghc-options: -Wall
