diff --git a/hoppy-generator.cabal b/hoppy-generator.cabal
--- a/hoppy-generator.cabal
+++ b/hoppy-generator.cabal
@@ -1,5 +1,5 @@
 name: hoppy-generator
-version: 0.5.1
+version: 0.5.2
 synopsis: C++ FFI generator - Code generator
 homepage: http://khumba.net/projects/hoppy
 license: AGPL-3
diff --git a/src/Foreign/Hoppy/Generator/Language/Haskell/Internal.hs b/src/Foreign/Hoppy/Generator/Language/Haskell/Internal.hs
--- a/src/Foreign/Hoppy/Generator/Language/Haskell/Internal.hs
+++ b/src/Foreign/Hoppy/Generator/Language/Haskell/Internal.hs
@@ -147,25 +147,17 @@
   -- to and from String, which is really [Char].
   --
   -- UndecidableInstances is needed for instances of the form "SomeClassConstPtr
-  -- a => SomeClassValue a", and overlapping instances are used for the overlap
-  -- between these instances and instances of SomeClassValue for the class's
-  -- native Haskell type, when it's convertible.  CPP is used for warning-free
-  -- compatibility using overlapping instances with both GHC 7.8 and 7.10.
+  -- a => SomeClassValue a" (overlapping instances are used here too).
   --
   -- GeneralizedNewtypeDeriving is to enable automatic deriving of
   -- Data.Bits.Bits instances for bitspace newtypes.
-  concat
-  [ concat $ "{-# LANGUAGE " : intersperse ", " extensions ++ [" #-}\n"]
-  , "#if !MIN_VERSION_base(4,8,0)\n"
-  , "{-# LANGUAGE OverlappingInstances #-}\n"
-  , "#endif\n\n"
-  ]
+  concat $ "{-# LANGUAGE " : intersperse ", " extensions ++ [" #-}\n"]
   where extensions =
-          [ "CPP"
-          , "FlexibleContexts"
+          [ "FlexibleContexts"
           , "FlexibleInstances"
           , "ForeignFunctionInterface"
           , "GeneralizedNewtypeDeriving"
+          , "MonoLocalBinds"
           , "MultiParamTypeClasses"
           , "ScopedTypeVariables"
           , "TypeSynonymInstances"
@@ -936,13 +928,8 @@
 
     -- Generate instances for all pointer subtypes.
     ln
-    saysLn ["#if MIN_VERSION_base(4,8,0)"]
     saysLn ["instance {-# OVERLAPPABLE #-} ", hsPtrClassName, " a => ", hsValueClassName, " a",
             if doDecls then " where" else ""]
-    saysLn ["#else"]
-    saysLn ["instance ", hsPtrClassName, " a => ", hsValueClassName, " a",
-            if doDecls then " where" else ""]
-    saysLn ["#endif"]
     when doDecls $ do
       addImports $ mconcat [hsImports "Prelude" ["($)", "(.)"],
                             hsImportForPrelude]
@@ -956,13 +943,8 @@
       (Just hsTypeGen, Just _) -> do
         hsType <- hsTypeGen
         ln
-        saysLn ["#if MIN_VERSION_base(4,8,0)"]
         saysLn ["instance {-# OVERLAPPING #-} ", hsValueClassName, " (", prettyPrint hsType, ")",
                 if doDecls then " where" else ""]
-        saysLn ["#else"]
-        saysLn ["instance ", hsValueClassName, " (", prettyPrint hsType, ")",
-                if doDecls then " where" else ""]
-        saysLn ["#endif"]
         when doDecls $ do
           addImports hsImportForRuntime
           indent $ saysLn [hsWithValuePtrName, " = HoppyFHR.withCppObj"]
