diff --git a/CHANGES.txt b/CHANGES.txt
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -1,5 +1,7 @@
 Changelog for Derive
 
+2.5.19
+    Support GHC 7.10
 2.5.18
     #4, fix the read instance for nullary constructors
 2.5.17
diff --git a/Data/Derive/Fold.hs b/Data/Derive/Fold.hs
--- a/Data/Derive/Fold.hs
+++ b/Data/Derive/Fold.hs
@@ -47,7 +47,8 @@
 
 
 mkFold :: DataDecl -> [Decl]
-mkFold d = [TypeSig sl [name n] (foldType d), FunBind $ zipWith f [0..] $ dataDeclCtors d]
+mkFold d | isIdent $ dataDeclName d = [TypeSig sl [name n] (foldType d), FunBind $ zipWith f [0..] $ dataDeclCtors d]
+         | otherwise = []
     where
         n = "fold" ++ title (dataDeclName d)
         f i c = Match sl (name n) pat Nothing (UnGuardedRhs bod) (BDecls [])
diff --git a/Data/Derive/From.hs b/Data/Derive/From.hs
--- a/Data/Derive/From.hs
+++ b/Data/Derive/From.hs
@@ -37,7 +37,8 @@
 
 
 makeFromCtor :: DataDecl -> CtorDecl -> [Decl]
-makeFromCtor d c = [TypeSig sl [name from] typ, FunBind $ match : [defMatch | length (dataDeclCtors d) > 1]]
+makeFromCtor d c | isIdent n = [TypeSig sl [name from] typ, FunBind $ match : [defMatch | length (dataDeclCtors d) > 1]]
+                 | otherwise = []
     where
         n = ctorDeclName c
         from = "from" ++ n
diff --git a/Data/Derive/Has.hs b/Data/Derive/Has.hs
--- a/Data/Derive/Has.hs
+++ b/Data/Derive/Has.hs
@@ -29,7 +29,7 @@
 
 
 makeHasField :: DataDecl -> String -> [Decl]
-makeHasField d field = [TypeSig sl [name has] typ, binds has ms]
+makeHasField d field = if isIdent field then [TypeSig sl [name has] typ, binds has ms] else []
     where
         has = "has" ++ title field
         typ = TyFun (dataDeclType d) (tyCon "Bool")
diff --git a/Data/Derive/Is.hs b/Data/Derive/Is.hs
--- a/Data/Derive/Is.hs
+++ b/Data/Derive/Is.hs
@@ -23,7 +23,7 @@
 
 
 makeIsCtor :: DataDecl -> CtorDecl -> [Decl]
-makeIsCtor d c =
+makeIsCtor d c = if not $ isIdent $ ctorDeclName c then [] else
         [TypeSig sl [name nam] (dataDeclType d `TyFun` tyCon "Bool")
         ,FunBind $ match : [defMatch | length (dataDeclCtors d) > 1]]
     where
diff --git a/Data/Derive/LazySet.hs b/Data/Derive/LazySet.hs
--- a/Data/Derive/LazySet.hs
+++ b/Data/Derive/LazySet.hs
@@ -28,7 +28,7 @@
 
 
 makeLazySetField :: DataDecl -> String -> [Decl]
-makeLazySetField d field = [TypeSig sl [name fun] typ, bind fun [pVar "v",pVar "x"] bod]
+makeLazySetField d field = if isIdent field then [TypeSig sl [name fun] typ, bind fun [pVar "v",pVar "x"] bod] else []
     where
         fun = "set" ++ title field
         typ = t `TyFun` (dataDeclType d `TyFun` dataDeclType d)
diff --git a/Data/Derive/Lens.hs b/Data/Derive/Lens.hs
--- a/Data/Derive/Lens.hs
+++ b/Data/Derive/Lens.hs
@@ -30,7 +30,7 @@
 
 
 makeLensField :: DataDecl -> String -> [Decl]
-makeLensField d field = [TypeSig sl [name ref] typ, bind ref [] bod]
+makeLensField d field = if isIdent field then [TypeSig sl [name ref] typ, bind ref [] bod] else []
     where
         ref = "lens" ++ title field
         typ = tyApps (tyCon "Lens") [dataDeclType d, t]
diff --git a/Data/Derive/Ref.hs b/Data/Derive/Ref.hs
--- a/Data/Derive/Ref.hs
+++ b/Data/Derive/Ref.hs
@@ -30,7 +30,7 @@
 
 
 makeRefField :: DataDecl -> String -> [Decl]
-makeRefField d field = [TypeSig sl [name ref] typ, bind ref [] bod]
+makeRefField d field = if isIdent field then [TypeSig sl [name ref] typ, bind ref [] bod] else []
     where
         ref = "ref" ++ title field
         typ = TyApp (tyCon "Ref") (dataDeclType d)
diff --git a/Data/DeriveTH.hs b/Data/DeriveTH.hs
--- a/Data/DeriveTH.hs
+++ b/Data/DeriveTH.hs
@@ -14,7 +14,9 @@
 import Language.Haskell.TH.All as TH hiding (Derivation(..),toName)
 import Language.Haskell as HS
 import Language.Haskell.Convert
+import Data.Generics
 
+
 -- | Derive an instance of some class. @derive@ only derives instances
 -- for the type of the argument.
 derive :: Derivation -> TH.Name -> Q [Dec]
@@ -33,12 +35,17 @@
 -- for the type of the argument.
 deriveFromDec :: Derivation -> Dec -> Q [Dec]
 deriveFromDec d x = do
-    x <- liftM normData $ expandData x
+    x <- fmap unkind $ liftM normData $ expandData x
     let unsup x = error $ "Derivation of " ++ derivationName d ++ " does not yet support Template Haskell, requires info for " ++ x
     case derivationOp d (tyCon $ derivationName d) unsup $ toFullDataDecl x of
         Left y -> runIO (putStrLn $ "Warning, couldn't derive: " ++ y) >> return []
         Right v -> return $ convert v
 
+unkind :: Dec -> Dec
+unkind = everywhere (mkT f)
+    where
+        f (KindedTV x _) = PlainTV x
+        f x = x
 
 toFullDataDecl :: Dec -> FullDataDecl
 toFullDataDecl x = (ModuleName "Todo", convert x)
diff --git a/Derive/Test.hs b/Derive/Test.hs
--- a/Derive/Test.hs
+++ b/Derive/Test.hs
@@ -21,10 +21,11 @@
 
 -- REASONS:
 -- UniplateDirect: Doesn't work through Template Haskell
-exclude = ["ArbitraryOld","UniplateDirect","Ref","Serial","Binary"]
+-- Typeable cannot be separately derived in GHC 7.8
+exclude = ["ArbitraryOld","UniplateDirect","Ref","Serial","Binary","Typeable"]
 
 -- These must be first and in every set
-priority = ["Eq","Typeable"]
+priority = ["Eq"]
 
 
 listType :: Decl
@@ -82,14 +83,15 @@
 autoTest :: String -> [DataDecl] -> [(Derivation,Src)] -> IO ()
 autoTest name ts ds =
     writeFile (name++".hs") $ unlines $
-        ["{-# LANGUAGE TemplateHaskell,FlexibleInstances,MultiParamTypeClasses,TypeOperators #-}"
+        ["{-# LANGUAGE TemplateHaskell,FlexibleInstances,MultiParamTypeClasses,TypeOperators,DeriveDataTypeable #-}"
         ,"{-# OPTIONS_GHC -Wall -fno-warn-missing-fields -fno-warn-unused-imports #-}"
         ,"module " ++ name ++ " where"
         ,"import Prelude"
         ,"import Data.DeriveTH"
+        ,"import Data.Typeable"
         ,"import Derive.TestInstances()"] ++
         [prettyPrint i | (_,s) <- ds, i <- srcImportStd s] ++
-        [prettyPrint t | t <- ts2] ++
+        [prettyPrint t ++ "\n  deriving Typeable" | t <- ts2] ++
         ["$(derives [make" ++ derivationName d ++ "] " ++ types ++ ")" | (d,_) <- ds]
     where
         types = "[" ++ intercalate "," ["''" ++ dataDeclName t | t <- ts2] ++ "]"
diff --git a/Language/Haskell.hs b/Language/Haskell.hs
--- a/Language/Haskell.hs
+++ b/Language/Haskell.hs
@@ -182,6 +182,7 @@
 noSl mr = transformBi (const sl) mr
 
 
+isIdent (x:xs) = isAlpha x || x == '_'
 title (x:xs) = toUpper x : xs
 
 qname = UnQual . name
diff --git a/Language/Haskell/Convert.hs b/Language/Haskell/Convert.hs
--- a/Language/Haskell/Convert.hs
+++ b/Language/Haskell/Convert.hs
@@ -24,6 +24,7 @@
 
 
 
+appT :: TH.Type -> [TH.Type] -> TH.Type
 appT = foldl AppT
 
 c mr = convert mr
@@ -38,6 +39,7 @@
         DataD cxt n vs con ds -> f DataType cxt n vs con ds
         NewtypeD cxt n vs con ds -> f NewType cxt n vs [con] ds
         where
+            f :: DataOrNew -> Cxt -> TH.Name -> [TyVarBndr] -> [Con] -> [TH.Name] -> HS.Decl
             f t cxt n vs con ds = DataDecl sl t (c cxt) (c n) (c vs) (c con) []
 
 instance Convert TH.Name HS.TyVarBind where
diff --git a/Language/Haskell/TH/FixedPpr.hs b/Language/Haskell/TH/FixedPpr.hs
--- a/Language/Haskell/TH/FixedPpr.hs
+++ b/Language/Haskell/TH/FixedPpr.hs
@@ -78,9 +78,9 @@
     ppr (TyConI d) = ppr d
     ppr (PrimTyConI name arity is_unlifted) 
       = text "Primitive"
-	<+> (if is_unlifted then text "unlifted" else empty)
-	<+> text "type construtor" <+> quotes (ppr name)
-	<+> parens (text "arity" <+> int arity)
+        <+> (if is_unlifted then text "unlifted" else empty)
+        <+> text "type construtor" <+> quotes (ppr name)
+        <+> parens (text "arity" <+> int arity)
     ppr (ClassOpI v ty cls fix) 
       = text "Class op from" <+> ppr cls <> colon <+>
         vcat [ppr_sig v ty, pprFixity v fix]
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Derive [![Hackage version](https://img.shields.io/hackage/v/derive.svg?style=flat)](http://hackage.haskell.org/package/derive) [![Build Status](http://img.shields.io/travis/ndmitchell/derive.svg?style=flat)](https://travis-ci.org/ndmitchell/derive)
+# Derive [![Hackage version](https://img.shields.io/hackage/v/derive.svg?style=flat)](https://hackage.haskell.org/package/derive) [![Build Status](https://img.shields.io/travis/ndmitchell/derive.svg?style=flat)](https://travis-ci.org/ndmitchell/derive)
 
 
 Data.Derive is a library and a tool for deriving instances for Haskell programs. It is designed to work with custom derivations, SYB and Template Haskell mechanisms. The tool requires GHC, but the generated code is portable to all compilers. We see this tool as a competitor to <a href="http://repetae.net/~john/computer/haskell/DrIFT/">DrIFT</a>.
diff --git a/derive.cabal b/derive.cabal
--- a/derive.cabal
+++ b/derive.cabal
@@ -1,7 +1,7 @@
 cabal-version:  >= 1.6
 build-type:     Default
 name:           derive
-version:        2.5.18
+version:        2.5.19
 build-type:     Simple
 copyright:      Neil Mitchell 2006-2014
 author:         Neil Mitchell <ndmitchell@gmail.com>
@@ -20,7 +20,7 @@
 extra-source-files:
     README.md
     CHANGES.txt
-tested-with:        GHC==7.8.2, GHC==7.6.3, GHC==7.4.2
+tested-with:        GHC==7.10.1, GHC==7.8.3, GHC==7.6.3, GHC==7.4.2
 
 source-repository head
     type:     git
