diff --git a/Language/Haskell/ParseMonad.hs b/Language/Haskell/ParseMonad.hs
--- a/Language/Haskell/ParseMonad.hs
+++ b/Language/Haskell/ParseMonad.hs
@@ -26,6 +26,8 @@
 	) where
 
 import Language.Haskell.Syntax(SrcLoc(..))
+import Control.Applicative
+import Data.Monoid
 
 -- | The result of a parse.
 data ParseResult a
@@ -34,6 +36,26 @@
 				-- ^ The parse failed at the specified
 				-- source location, with an error message.
 	deriving Show
+
+instance Functor ParseResult where
+  fmap f (ParseOk x)           = ParseOk $ f x
+  fmap f (ParseFailed loc msg) = ParseFailed loc msg
+
+instance Applicative ParseResult where
+  pure = ParseOk
+  ParseOk f           <*> x = f <$> x
+  ParseFailed loc msg <*> _ = ParseFailed loc msg
+
+instance Monad ParseResult where
+  return = ParseOk
+  ParseOk x           >>= f = f x
+  ParseFailed loc msg >>= _ = ParseFailed loc msg
+
+instance Monoid m => Monoid (ParseResult m) where
+  mempty = ParseOk mempty
+  ParseOk x `mappend` ParseOk y = ParseOk $ x `mappend` y
+  ParseOk _ `mappend` err       = err
+  err       `mappend` _         = err -- left-biased
 
 -- internal version
 data ParseStatus a = Ok ParseState a | Failed SrcLoc String
diff --git a/Language/Haskell/Syntax.hs b/Language/Haskell/Syntax.hs
--- a/Language/Haskell/Syntax.hs
+++ b/Language/Haskell/Syntax.hs
@@ -1,4 +1,5 @@
-{-# OPTIONS_GHC -fglasgow-exts -cpp #-}
+{-# LANGUAGE CPP                #-}
+{-# LANGUAGE DeriveDataTypeable #-}
 -----------------------------------------------------------------------------
 -- |
 -- Module      :  Language.Haskell.Syntax
diff --git a/haskell-src.cabal b/haskell-src.cabal
--- a/haskell-src.cabal
+++ b/haskell-src.cabal
@@ -1,19 +1,26 @@
-name:		haskell-src
-version:	1.0.1.3
-license:	BSD3
-license-file:	LICENSE
-author:		Simon Marlow, Sven Panne and Noel Winstanley
-maintainer:	libraries@haskell.org
-category:	Language
-synopsis:	Manipulating Haskell source code
+name:           haskell-src
+version:        1.0.1.4
+license:        BSD3
+license-file:   LICENSE
+author:         Simon Marlow, Sven Panne and Noel Winstanley
+maintainer:     libraries@haskell.org
+category:       Language
+synopsis:       Support for manipulating Haskell source code
 description:
-	Facilities for manipulating Haskell source code:
-	an abstract syntax, lexer, parser and pretty-printer.
+    The 'haskell-src' package provides support for manipulating Haskell
+    source code. The package provides a lexer, parser and
+    pretty-printer, and a definition of a Haskell abstract syntax tree
+    (AST). Common uses of this package are to parse or generate Haskell
+    98 code.
 build-type:     Simple
-cabal-version:  >=1.2
+cabal-version:  >=1.6
 
 flag split-base
 
+source-repository head
+    type:     darcs
+    location: http://code.haskell.org/haskell-src
+
 library
   exposed-modules:
         Language.Haskell.Lexer,
@@ -23,11 +30,11 @@
         Language.Haskell.Syntax,
         Language.Haskell.ParseUtils
   if flag(split-base)
-    build-depends:	base >= 3 && < 4, pretty, array
+    build-depends:      base >= 4 && < 5, syb, pretty, array
   else
-    build-depends:	base < 3
+    build-depends:      base < 3
   build-depends: haskell98
   -- The dependency on Haskell 98 is only because
   -- Happy generates a parser that imports Array
-  extensions:	CPP
-  nhc98-options:	-K11M
+  extensions:   CPP
+  nhc98-options:        -K11M
